我想像boost signals2 documentation中那样传递一个插槽来断开连接:
传递插槽断开连接:在此接口模型中,断开连接 与sig.connect连接的插槽(typeof(sig):: slot_type(slot_func)) 通过sig.disconnect(slot_func)执行。
#include <iostream>
#include <boost/signals2.hpp>
class Test {
public:
Test();
using Signal = boost::signals2::signal<void ()>;
void slot();
void test();
};
Test::Test() {
boost::function<void ()> boundSlot = boost::bind(&Test::slot, this);
Signal sig;
sig.connect(Signal::slot_type(boundSlot));
sig();
sig.disconnect(boundSlot);
};
void Test::slot() {
std::cout << "slot()" << std::endl;
};
int main()
{
Test aTest;
return 0;
}
...但是在调用disconnect时遇到错误(请参阅http://cpp.sh/45q6):
错误:'operator =='的模糊重载 (操作数类型是'boost :: signals2 :: slot&gt; :: slot_function_type {aka boost :: function}'
和'const boost :: function')
我错了什么?
答案 0 :(得分:1)
问题是,std::function
没有operator ==进行功能比较,仅适用于function和nullptr,但它是必需的,所以你可以使用boost::function
,它有比较运算符和boost::bind
。