1

我想通过一个插槽来断开连接,就像在boost signals2 文档中一样:

Pass slot to disconnect:在这个接口模型中,通过 sig.disconnect(slot_func) 执行与 sig.connect(typeof(sig)::slot_type(slot_func)) 连接的 slot 的断开连接。

#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;
}

...但是在调用断开连接时出现错误(请参阅http://cpp.sh/45q6):

错误:'operator==' 的重载不明确
(操作数类型是 'boost::signals2::slot >::slot_function_type {aka boost::function}'
和 'const boost::function')

我错了什么?

4

1 回答 1

1

问题是,它std::function没有用于函数比较的运算符 ==,仅用于函数和 nullptr,但它是必需的,所以你可以使用boost::function具有比较运算符和boost::bind的 .

于 2016-01-15T14:46:41.187 回答