1
부스트 신호를 사용하는이 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);
}
};
펑터가 무엇을 반환할지 알 수 없습니다. 내가 이해하는 한, m_signal
은 Signature
서명으로 함수에 연결할 수있는 신호를 선언 할 수있는 유형입니다. 유형을 매개 변수로 사용하는 것이 가능한가? (return BaseType::m_signal(arg);
참조) ResultType
으로 표시되는 유형은 무엇입니까? 그리고 어떻게 functor에 의해 반환 된 객체 SelArity
을 사용할 수 있습니까?
무엇에 대해'arg'? arg도 인스턴스예요? 또한 나는 boost 문서를 읽고'SignalType'이 맞으면 (Signature가'void (float)'와 같은 경우) 신호 객체를 호출 할 때 어떤 매개 변수도 필요하지 않습니다.
'sig (5);'
그래서'SignalType' 객체를 리턴해야 할 필요가 있습니다. (이것은' m_signal') 하나의 매개 변수? 이 예제에서는'm_signal'을'sig'로 번역하지 않습니까? 그렇다면'm_signal'을 인자로 호출해야하는 이유는 무엇입니까? –
@ 존 스미스 1) 예,'arg'는 (BaseType :: SignatureTraits :: arg1_type' 타입의) 인자입니다. 2) 시그널의 시그니처가'void (float)'이면, 호출자는'sig (5.0)'이라는 하나의 인수로 호출해야합니다. 3) 펑터는 신호 객체를 반환하지 않으며, * 그것을 호출하고 반환 값을 반환합니다 (문서의 "결합 자"참조). 4) 가장 마지막이 아니지만 : C++ 기초에 대한 책을 읽는 것이 좋습니다! 고급 주제를 이해하는 것이 중요합니다. –