boost :: signals2和异常处理

时间:2013-06-07 21:33:13

标签: c++ boost boost-signals2

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

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

我不知道如何在组合器中执行此操作,因为我无法访问插槽或连接对象?所以我没有找到获取任何信息的方法。 (在每个插槽上更改返回类型是不可行的。)

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

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

子类类似于slot_call_iterator(用于包装try / catch中的调用)和connection_body_base(用于存储有关它所属的组件的信息)并且使用boost来使用这些吗? (如何?)

或者子类signals2 :: slot< ...>,在构造函数中提供有关拥有组件的信息,并以某种方式重载operator()(...)? (也不知道这一点,似乎对所有模板魔法更加困难。)

1 个答案:

答案 0 :(得分:0)

总结评论:

来自Igor R。

  

这种功能似乎不存在,但是您可以添加功能   在追踪中提出要求(甚至提供补丁)。

从整数(很好的昵称)开始:

  

谢谢您的评论。是的,我以为它不存在,只是   想知道是否有一种方法可以公开继承或继承   导出了boost类来制作自己的类。可能令人生畏   试图用增强代码盲目地做到这一点,因为我担心会做某事   可能会损坏或滥用内部零件。