2013-08-01 26 views
0

我有一個不可複製的對象的實例,我想使用boost信號2。連接方法期望我的仿函數是可複製的。有沒有辦法解決這個問題?我如何刪除下面的代碼中的評論?如何使用不可複製的對象作爲boost :: signals2 :: slot的插槽

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

struct Noncopyable 
{ 
    Noncopyable() {}; 
    void operator()() { std::cerr << "hi Noncopyable" << std::endl; } 
private: 
    Noncopyable(Noncopyable const&); 
}; 

int main(void) 
{ 
    Noncopyable no_copy; 
    boost::signals2::signal<void()> sig; 
    //sig.connect(no_copy); 
    sig(); 
} 

有一種方法傳遞給no_copy對象的引用進connect方法?

回答

1

使用boost::ref(或std::ref)函數通過引用傳遞這樣的對象:

#include <iostream> 
#include <boost/signals2.hpp> 
#include <boost/ref.hpp> 

struct Noncopyable 
{ 
    Noncopyable() {}; 
    void operator()() { std::cerr << "hi Noncopyable" << std::endl; } 
private: 
    Noncopyable(Noncopyable const&); 
}; 

int main(void) 
{ 
    Noncopyable no_copy; 
    boost::signals2::signal<void()> sig; 
    sig.connect(boost::ref(no_copy)); 
    sig(); 
} 

當然,確保no_copy對象住,只要至少它的連接到sig

相關問題