Boost::signals2和异常处理
boost::signals2 and exception handling
是否有一些方法可以覆盖在boost::signals2中调用插槽并执行一些操作(日志记录,调试,异常处理)的特定时刻?
我想在插槽调用的时刻捕获异常,因为信号/插槽是我的代码中的执行路径在各种软件组件之间交叉的地方,每个组件都是可选的/如果它行为不当,可以在运行时禁用。因此,当插槽调用抛出(可能来自外部库,可能只是std::bad_alloc)时,我希望得到有关它的通知——并知道哪个组件收到了信号——这样我就可以杀死那个组件。
我不知道如何在组合器中做到这一点,因为我无法访问那里的插槽或连接对象?所以我没办法得到任何信息。(更改每个槽的返回类型是不可行的。)
有没有什么超级简单的方法可以做到这一点,我错过了?
如果没有,我该怎么做呢?
子类slot_call_iterator(在try/catch中包装调用)和connection_body_base(存储关于它属于什么组件的信息),并有boost使用这些?(如何?)
或子类signals2::slot<…>,在构造函数中提供有关所属组件的信息,并以某种方式重载操作符()(…)?(这一点我也不知道,似乎很难与所有的模板魔法。)
总结一下注释:
源自Igor R.
这样的功能似乎不存在,但您可以添加一个特性请求(甚至提供补丁)。
From integer (nice昵称):
谢谢你的评论。是啊,我以为它不存在,只是想知道是否有子类化或公开重写的方法导出了我自己的boost类。这可能很吓人尝试盲目地使用boost代码,因为我害怕做一些事情这可能会破坏或滥用内部。
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理
- 使用 stoi 功能进行异常处理
- 子系统中的异常处理:本机
- 与异常处理程序中的操作员<<不匹配
- 数组 C++ 上的异常处理程序
- 异常处理:如果用户输入不是三个特定字符之一
- C++ 异常处理错误输出
- 视觉 std::矢量无异常:警告 C4530:使用了C++异常处理程序,但未启用展开语义.指定 /EHsc
- C++交换机状态异常处理
- 在字符串类上的成员函数和out_of_range异常处理
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- 执行视觉工作室异常处理模式
- 为什么隐式转换在异常处理中从派生到基?
- C++执行期间的类成员函数错误/异常处理
- C++ 中未处理的异常处理程序
- 用户定义的异常处理
- C :ScopeGuard vs返回支票和异常处理
- Boost::signals2和异常处理