如何比较 boost::signals2 中的插槽类型

Posted

技术标签:

【中文标题】如何比较 boost::signals2 中的插槽类型【英文标题】:Howto compare slot_type in boost::signal2 【发布时间】:2015-05-12 14:17:32 【问题描述】:

如果您使用不同的函数(将被调用)连接到信号,如何检查该函数是否已连接? 通常我会比较函数指针的地址,但是我怎样才能访问那个指针呢?

例子:

boost::signals2::signal<void ()> sig;

sig.connect(Callback1());
sig.connect(Callback2());

那么如何避免再次调用

sig.connect(Callback1());

?

【问题讨论】:

我尝试先调用断开连接,但在 function_equal_impl 中查找 == 运算符来比较插槽时出现编译器错误。 【参考方案1】:

您可以使用boost::signals2::connection 对象来存储信号与插槽的连接,因此您可以这样做:

boost::signals2::connection c = sig.connect(Callback1());
// another call
if (! c.connected())
     sig.connect(Callback1());
 else 
     cout << "signal with this slot is connected! << endl;

【讨论】:

谢谢,但我可以检查一下它是否与 Callback1() 完全相关吗?

以上是关于如何比较 boost::signals2 中的插槽类型的主要内容,如果未能解决你的问题,请参考以下文章

boost--signal

从 boost::signals2 安全断开

在地图中存储 boost::signals2 信号?

使用 boost::signals2 的编译时间非常慢

boost::signals2::signal 输出错误?

使用 boost::signals2 和卸载 DLL 时访问冲突