Boost::signals2和异常处理

boost::signals2 and exception handling

本文关键字:异常处理 signals2 Boost      更新时间:2023-10-16

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

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

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

有没有什么超级简单的方法可以做到这一点,我错过了?

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

子类slot_call_iterator(在try/catch中包装调用)和connection_body_base(存储关于它属于什么组件的信息),并有boost使用这些?(如何?)

或子类signals2::slot<…>,在构造函数中提供有关所属组件的信息,并以某种方式重载操作符()(…)?(这一点我也不知道,似乎很难与所有的模板魔法。)

总结一下注释:

源自Igor R.

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

From integer (nice昵称):

谢谢你的评论。是啊,我以为它不存在,只是想知道是否有子类化或公开重写的方法导出了我自己的boost类。这可能很吓人尝试盲目地使用boost代码,因为我害怕做一些事情这可能会破坏或滥用内部。