c++ - boost::signals2 和异常处理

标签 c++ boost boost-signals2

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

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

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

有没有我错过的 super 简单的方法?

如果没有,我该怎么办?

子类类似于 slot_call_iterator(在 try/catch 中包装调用)和 connection_body_base(例如存储关于它属于哪个组件的信息)并让 boost 使用它们? (如何?)

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

最佳答案

总结评论:

来自 Igor R。

Such a functionality doesn't seem to exist, but you can add a feature request in the trac (or even provide a patch).

来自整数(好听的昵称):

Thank you for your comment. Yeah, I assumed it didn't exist, was just wondering if there were a way to subclass or override publicly exported boost classes to make my own, sort of. It can be intimidating trying to do this blindly with boost code as I'd fear doing something which might break or misuse internals.

关于c++ - boost::signals2 和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993316/

相关文章:

C++:直接使用函数返回 shared_ptr 的值是个坏主意吗?

c++ - 需要帮助才能进入 ifstream::open 以打开文件并从中获取行

c++ - 如何从另一个线程中引发的 Boost 信号更新 Qt GUI?

c++ - Boost::signals2 - 描述带有插槽的对象

c++ - 具有纯虚方法的接口(interface)与类

c++ - 丢失我继承类的重写功能 : casting to base class, 然后通过引用传递

c++ - 调用汽车类时的极端负数

c++ - 简单的 Boost TCP 服务器,书中的示例 "C++ Crash Course"

c++ - 指定 boost 信号的备用默认值2

c++ - 为指针赋值时出现段错误 C++