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

4

2 回答 2

8

您需要使用占位符:

sig.connect( boost::bind(&Foo::Slot, &obj, _1) );
于 2012-05-25T10:34:42.600 回答
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 );
}
于 2012-05-25T11:03:02.100 回答