The template commissioned by egg pain is tangled every time you see it.
# Pragma onceclass delegate_listener {public: void test (void *) {MessageBox (0, _ T ("egg template delegate"), _ T ("delegate "), mb_iconinformation | mb_ OK) ;}}; template <typename T, typename r = void> class delegate {typedef r (t: * _ callback) (void *); public: inline explicit delegate (): _ listener (nullptr), _ callback (nullptr) {} inline explicit delegate (T * OBJ, _ callback F): _ listener (OBJ ), _ fun (f) {} inline explicit delegate (const delegate & OBJ) {_ listener = obj. _ listener; _ fun = obj. _ fun;} inline delegate & operator = (const delegate & OBJ) {_ listener = obj. _ listener; _ fun = obj. _ fun;} public: inline R fired (void * parameter) {If (_ listener) {If (_ fun) Return (_ listener-> * _ fun) (parameter);} return r ();} PRIVATE: T * _ listener; _ callback _ fun ;};
Call code:
Delegate_listener listener; DeleGate <delegate_listener> delegate (& listener, & delegate_listener: Test); Delegate. Fired (null );