Я считаю, что проблема заключается в объявлении члена:
const typeFctPtr& m_ref_Wrapper;
Вместо этого попробуйте сбросить &
:
const typeFctPtr m_ref_Wrapper;
Ссылка всегда должна ссылаться на другую существующуюобъект.В этом случае он будет ссылаться на временный объект, созданный для хранения ссылки на указатель во время вызова конструктора.
Пока мы работаем над этим, я бы посоветовал вам удалить ссылку изконструктор также.Причина этого заключается в том, что при работе со скаляром нет никакой выгоды: s.
Еще одна вещь, которая сделает ваш код более читабельным, - это если бы вы указали тип функции, а не указатель нафункция.Таким образом, было бы ясно, что вы передаете указатель.
Ниже приведена сокращенная версия, в которой кратко изложены изменения, которые я предлагаю выше:
typedef void (typeFct)(void*);
class CDelegate
{
public:
CDelegate (typeFct * f_Wrapper, void* f_pvSubscriber)
: m_ref_Wrapper(f_Wrapper), m_pvSubscriber(f_pvSubscriber)
{
}
inline void operator () () const
{
(*m_ref_Wrapper)(0);
}
private:
void* m_pvSubscriber;
typeFct * m_ref_Wrapper;
};