是否有某种方法可以覆盖在 boost::signals2 中调用插槽并执行某些操作(日志记录、调试、异常处理)的特定时刻?
我想在插槽调用时捕获异常,因为信号/插槽是我的代码中的执行路径在各种软件组件之间交叉的地方,每个组件都是可选的/如果行为不端可以在运行时禁用。因此,当插槽调用抛出(可能来自外部库,可能只是 std::bad_alloc)时,我希望收到有关它的通知——并知道哪个组件被发送到——所以我可以杀死那个组件。
我看不到如何在组合器中做到这一点,因为我无法访问那里的插槽或连接对象?所以我看不到获取任何信息的方法。(更改每个插槽的返回类型是不可行的。)
有没有一些我错过的超级简单的方法来做到这一点?
如果没有,我应该怎么做?
子类诸如 slot_call_iterator (将调用包装在 try/catch 中)和 connection_body_base (例如存储有关它所属的组件的信息)并提升使用这些?(如何?)
或者子类signals2::slot<...>,在构造函数中给它有关拥有组件的信息并以某种方式重载operator()(...)?(对此也不知道,使用所有模板魔法似乎要困难得多。)