Что является прототипом для Boost :: signal2 :: signal :: connect - PullRequest
2 голосов
/ 03 апреля 2011

Я хотел бы инкапсулировать объект 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 ]

2 голосов
/ 03 апреля 2011

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 голосов
/ 03 апреля 2011

Краткое описание класса signal здесь , включая сигнатуры перегрузок signal::connect.

...