Что является прототипом для Boost::signal2::signal::connect
Я хотел бы инкапсулировать объект signal2::signal и предоставлять функции connect и operator(), но как выглядят их прототипы?
Пример:
#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);}
signal
Краткий обзор класса здесь, в том числе подписи signal::connect
Перегрузки.