2011-04-03 79 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重载的签名。

相关问题