2012-05-25 44 views
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/當我使用相同的連接&的綁定代碼。

回答

8

您需要使用的佔位符:

sig.connect(boost::bind(&Foo::Slot, &obj, _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); 
}