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