union ucallback { void* ptr; }; class ICallBack { public: virtual void Call(ucallback param) = 0; }; template class CPP_CallBack : public ICallBack { public: CPP_CallBack(T& owner) : m_owner(owner) {} void Call(ucallback param) { m_owner.*Method(param); } private: CPP_CallBack(); T& m_owner; }; class C_CallBack : public ICallBack { typedef void (*Method)(ucallback); public: C_CallBack(Method method) : m_method(method) {} void Call(ucallback param) { m_method(param); } private: C_CallBack(); Method m_method; };