在boost::signals2 2中调用插槽时是否有某种方式覆盖特定时刻并执行一些操作(日志记录、调试、异常处理)?
我想在时隙调用时捕获异常,因为信号/时隙是代码中的执行路径在不同的软件组件之间交叉的地方,每个组件都是可选的/可以在运行时被禁用(如果它行为不当)。因此,当插槽调用抛出(可能来自外部库,可能只是std::bad_alloc)时,我希望得到通知--并知道哪个组件被发送到--这样我就可以杀死该组件。
我不知道如何在一个组合器中这样做,因为我无法访问那里的插槽或连接对象?所以我看不出有什么办法能得到任何信息。(更改每个插槽的返回类型是不可行的。)
有什么我错过的超简单的方法吗?
如果没有,我该怎么做呢?
子类,比如slot_call_iterator (在try/catch中包装调用)和connection_body_base (例如存储它属于哪个组件的信息),并让boost使用这些子类?(如何?)
或者子类signals2::slot<...>,给它提供构造函数中拥有组件的信息,并以某种方式重载操作符()(.)?(也不知道,所有的模板魔术似乎都要难得多。)
发布于 2018-06-21 09:10:45
总结评论意见:
伊戈尔R.
这样的功能似乎并不存在,但是您可以在trac中添加一个特性请求(甚至提供一个修补程序)。
来自整数(很好的昵称):
感谢您的评论。是的,我以为它不存在,只是想知道是否有一种方法可以子类或覆盖公开导出的boost类来创建我自己的类。用boost代码盲目地做这件事可能会让人感到害怕,因为我害怕做一些可能会破坏或误用内部的事情。
https://stackoverflow.com/questions/16993316
复制相似问题