如何比较 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 中的插槽类型的主要内容,如果未能解决你的问题,请参考以下文章