信号和绑定参数

时间:2012-05-25 10:32:49

标签: c++ boost signals bind

我正在使用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/当我使用相同的连接和绑定代码时。

2 个答案:

答案 0 :(得分:8)

您需要使用占位符:

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

答案 1 :(得分:2)

您需要阅读Automatic Connection Management,其中存在关于如何连接带参数的插槽的类似示例。

在你的情况下,就像这样:

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