Boost сигналы — тип, передаваемый в качестве параметра

Я нашел этот код C ++, который использует сигналы повышения, и я пытаюсь понять это.

// A boost::signal wrapper structure
template <typename Signature>
struct SignalBase : public boost::noncopyable
{
typedef boost::function_traits< Signature >        SignatureTraits;

typedef boost::signal<Signature>                   SignalType;
typedef typename SignalType::slot_function_type    SlotFunctionType;
typedef typename SignalType::result_type           ResultType;
typedef boost::signals::connection                 ConnectionType;

SignalBase() : m_signal() {};
virtual ~SignalBase() {};

protected:
SignalType m_signal;
};// I use a specialization of this template for an arity of 1.
// The template generates the correct function call operator for the arity of the signal.
template<int Arity, typename Signature>
struct SelArity : public SignalBase<Signature> {};

// Specialization
template<typename Signature>
struct SelArity< 1, Signature> : public SignalBase<Signature>
{
typedef SignalBase<Signature> BaseType;
inline typename BaseType::ResultType operator()(typename BaseType::SignatureTraits::arg1_type arg )
{
return BaseType::m_signal( arg );
}
};

Я не могу понять, что SelArity функторы вернутся. Насколько я понимаю m_signal это тип, который может объявлять сигналы, которые смогут подключаться к функциям с Signature подпись. Как можно иметь типы в качестве параметров? (См. return BaseType::m_signal( arg ); ) Какой тип представлен ResultType ? И как я смогу использовать объект, возвращенный SelArity функтор?

1

Решение

Нет, m_signal это не тип, это экземпляр класса SignalType, который boost::signal<Signature>,

SelArity функтор на самом деле вызывает m_signal с 1 аргументом и возвращает его возвращаемое значение.

(Для чего нужны все эти обертки, я не знаю.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector