#include <iostream> using namespace std; class Callee { public: void PrintInfo(int i) { cout << "printf info " << i << endl; } static void OnCallback(void *arg, int i) { Callee *callee = static_cast<Callee*>(arg); callee->PrintInfo(i); } }; typedef void(*CallbackFunctor)(void*, int); class Caller { public: void SetCallback(CallbackFunctor func, void *arg) { m_callBack = func; m_callee = arg; } void DoCallback(int i) { m_callBack(m_callee, i); } private: CallbackFunctor m_callBack; void *m_callee; }; int main() { Caller caller; Callee callee; caller.SetCallback(Callee::OnCallback, &callee); caller.DoCallback(10); Caller caller2; Callee callee2; caller2.SetCallback(Callee::OnCallback, &callee2); caller2.DoCallback(20); return 0; }