Я пытаюсь реализовать класс шаблона, который требует наличия члена-сигнала, который зависит от аргумента шаблона. Моей первой идеей было реализовать это так:
template<class T>
class SignalClass
{
typedef boost::signals2::signal<void (T &)> OnReceive;
public:
SignalClass(const OnReceive::slot_type &_slot)
{
m_onReceive.cnnect(_slot);
}
virtual SignalClass(){};
void Send(T &_val)
{
m_onReceive(_val);
}
private:
OnReceive m_onReceive;
};
Этот класс должен использоваться как:
class SignaledClass
{
public:
SignaledClass(void)
{
SignalClass<int> var1(boost::bind(&SignaledClass::ReceiveINT, this));
SignalClass<double> var2(boost::bind(&SignaledClass::ReceiveDOUBLE, this));
}
void ReceiveINT(int &_val)
{
...
}
void ReceiveDOUBLE(double &_val)
{
...
}
}
(Кстати: я знаю, что нет смысла создавать объект SignalClass только внутри конструктора. Это просто для понимания моей проблемы.)
Для меня важно реализовать делегатоподобную концепцию с шаблоном в качестве параметра сигнала.
Проблема в том, что код конструктора не работает.
Но я нашел решение.
Если я дополнительно укажу typedef
, например
typedef typename OnReceive::slot_type slot_type;
и используйте этот параметр для конструктора, например
PushInputSlot(const slot_type& _slot);
это работает.
Но я понятия не имею, почему.
Я надеюсь, что кто-нибудь может мне помочь.
Thanx,
Frank
P.S .: Я новичок в stackoverflow, поэтому я не знаком с правилами здесь. Надеюсь, я все сделал правильно ...; -) ....