小编int*_*ger的帖子

boost::signals2 和异常处理

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

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

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

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

如果没有,我该怎么办?

将诸如 slot_call_iterator(在 try/catch 中包装调用)和 connection_body_base(例如存储有关它属于哪个组件的信息)之类的东西子类化,并让 boost 使用这些?(如何?)

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

c++ boost boost-signals2

5
推荐指数
1
解决办法
711
查看次数

标签 统计

boost ×1

boost-signals2 ×1

c++ ×1