【问题标题】:boost::signals2 and exception handlingboost::signals2 和异常处理
【发布时间】:2013-06-07 21:33:12
【问题描述】:

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

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

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

有没有一些我错过的超级简单的方法?

如果没有,我该怎么办?

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

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

【问题讨论】:

  • 这样的功能好像不存在,但是可以在trac中添加功能请求(甚至提供补丁)。
  • 感谢您的评论。是的,我认为它不存在,只是想知道是否有办法对公开导出的 boost 类进行子类化或覆盖以制作我自己的类。盲目地尝试使用 boost 代码执行此操作可能会令人生畏,因为我担心这样做可能会破坏或滥用内部结构。

标签: c++ boost boost-signals2


【解决方案1】:

总结一下cmets:

来自伊戈尔·R。

这样的功能好像不存在,不过可以加个功能 在 trac 中请求(甚至提供补丁)。

来自整数(好昵称):

感谢您的评论。是的,我以为它不存在,只是 想知道是否有办法公开子类或覆盖 导出提升类来制作我自己的,有点。它可能令人生畏 试图用提升代码盲目地做到这一点,因为我害怕做某事 这可能会破坏或滥用内部结构。

【讨论】:

    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-05-11
    • 2012-05-14
    • 2011-12-15
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多