2

我想封装一个 signals2::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::???

4

2 回答 2

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);}
于 2011-04-03T17:49:43.943 回答
0

signal类概要在这里包括signal::connect重载的签名。

于 2011-04-03T14:22:01.790 回答