1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| struct Callback
{
virtual ~Callback() {}
virtual void Call()=0;
virtual void operator()()=0;
};
struct FreeCallback : Callback
{
typedef void(*func)();
FreeCallback(func _func) : ptr(_func) {}
void Call() { (*ptr)(); }
void operator()() { (*ptr)(); }
private:
func ptr;
};
template< class T >
struct MemberCallback : Callback
{
typedef void(T::*ptrFct)(void);
MemberCallback(T* object, ptrFct method) : m_obj(object), m_method(method) {}
void Call() { m_obj->m_method(); }
void operator()(void) { m_obj->m_method(); }
private:
T* m_obj;
ptrFct m_method;
}; |