5

是否有某种方法可以覆盖在 boost::signals2 中调用插槽并执行某些操作(日志记录、调试、异常处理)的特定时刻?

我想在插槽调用时捕获异常,因为信号/插槽是我的代码中的执行路径在各种软件组件之间交叉的地方,每个组件都是可选的/如果行为不端可以在运行时禁用。因此,当插槽调用抛出(可能来自外部库,可能只是 std::bad_alloc)时,我希望收到有关它的通知——并知道哪个组件被发送到——所以我可以杀死那个组件。

我看不到如何在组合器中做到这一点,因为我无法访问那里的插槽或连接对象?所以我看不到获取任何信息的方法。(更改每个插槽的返回类型是不可行的。)

有没有一些我错过的超级简单的方法来做到这一点?

如果没有,我应该怎么做?

子类诸如 slot_call_iterator (将调用包装在 try/catch 中)和 connection_body_base (例如存储有关它所属的组件的信息)并提升使用这些?(如何?)

或者子类signals2::slot<...>,在构造函数中给它有关拥有组件的信息并以某种方式重载operator()(...)?(对此也不知道,使用所有模板魔法似乎要困难得多。)

4

1 回答 1

0

总结评论:

来自伊戈尔 R。

这样的功能似乎不存在,但您可以在 trac 中添加功能请求(甚至提供补丁)。

从整数(好昵称):

感谢您的评论。是的,我认为它不存在,只是想知道是否有一种方法可以继承或覆盖公开导出的 boost 类来制作我自己的类。尝试盲目地使用 boost 代码执行此操作可能会令人生畏,因为我担心做一些可能会破坏或滥用内部结构的事情。

于 2018-06-21T09:10:45.707 回答