2011-04-03 89 views
2

我想封裝一個signals2 :: signal對象並且暴露connect和operator()函數,但是它們的原型是怎麼樣的?什麼是Boost的原型:: signals2 :: signal :: connect

例子:

#include <boost/signals2/signal.hpp> 

template<typename T> class A { 
    public: 
     typedef boost::signals2::signal<T> SIG_T; 

     void connect(TYPE1 arg){ 
      s.connect(arg); 
     } 

     void fire (TYPE2 arg){ 
      s(arg); 
     } 

    private: 
     SIG_T s; 
}; 

那麼如何表達正確類型Type1和Type2,我認爲它是像SIG_T:???

回答

2

connect需要typename SIG_T::slot_type const &

operator()需要typename SIG_T::argument_type(也定義爲typename SIG_T::arg<0>::type)。

或者,您可以使用模板來避免擔心確切定義和接受任何轉換爲​​正確的類型:

template <typename Slot> void connect(Slot const & slot) {s.connect(slot);} 
template <typename Arg> void fire(Arg const & arg) {s(arg);} 
0

signal課程簡介是here,包括signal::connect重載的簽名。

相關問題