boost signals2 - 通过插槽断开时出错

时间:2016-01-15 14:29:28

标签: c++ boost signals2

我想像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')

我错了什么?

1 个答案:

答案 0 :(得分:1)

问题是,std::function没有operator ==进行功能比较,仅适用于function和nullptr,但它是必需的,所以你可以使用boost::function,它有比较运算符和boost::bind