1

私はboost::signals2ライブラリを使用していますが、ここに簡単なコードがあります:

boost::signals2<void ()> sig;
class Foo {
   void Slot() {}
};

Foo obj;
sig.connect( boost.bind(&Foo::Slot, &obj) );

すべてがうまく機能します。しかし今、私は自分のシグナルがいくつかのデータを引数に渡したいと思っています:

boost::signals2<void (std::vector<float>)> sig2;
class Foo {
   void Slot2(std::vector<float>) {}
};

Slot2 を再びシグナルにバインドする正しい方法は何ですか?

エラーは次のとおりです: http://dpaste.com/752076/同じ connect&binding コードを使用した場合。

4

2 に答える 2

8

プレースホルダーを使用する必要があります。

sig.connect( boost::bind(&Foo::Slot, &obj, _1) );
于 2012-05-25T10:34:42.600 に答える
2

自動接続管理を読む必要があります。ここには、引数を取るスロットを接続する方法に関する同様の例があります。

あなたの場合、次のようになります。

#include <boost/signals2.hpp>
#include <vector>

struct Foo {
   void Slot1() {}
   void Slot2(std::vector<float>) {}
};

int main()
{
    typedef boost::signals2::signal<void ()> st1;
    typedef st1::slot_type sst1;
    typedef boost::signals2::signal<void (std::vector<float>)> st2;
    typedef st2::slot_type sst2;

    st1 sig1;
    st2 sig2;

    Foo foo;

    sig1.connect( sst1( &Foo::Slot1, foo ) );
    sig2.connect( sst2( &Foo::Slot2, foo, _1 ) );

    sig1();
    std::vector<float> v(5,2.2);
    sig2( v );
}
于 2012-05-25T11:03:02.100 に答える