1

ブーストシグナル2のドキュメントのように、切断するスロットを渡したい:

スロットを渡して切断する:このインターフェース モデルでは、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;
}

...しかし、切断を呼び出すときにエラーが発生しました(http://cpp.sh/45q6を参照):

エラー: 'operator==' のあいまいなオーバーロード
(オペランドの型は 'boost::signals2::slot >::slot_function_type {aka boost::function}'
および 'const boost::function' です)

私は何を間違っていますか?

4

1 に答える 1