#ifndef EVENT_OBJECT_CALLBACK_H #define EVENT_OBJECT_CALLBACK_H #include template class ObjectMethodCallback : public SimpleCallback { public: typedef void (C::*const method_t)(void); private: C *const obj_; method_t method_; public: template ObjectMethodCallback(CallbackScheduler *scheduler, C *obj, T method) : SimpleCallback(scheduler), obj_(obj), method_(method) { } ~ObjectMethodCallback() { } private: void operator() (void) { (obj_->*method_)(); } }; template class ObjectMethodArgCallback : public SimpleCallback { public: typedef void (C::*const method_t)(A); private: C *const obj_; method_t method_; A arg_; public: template ObjectMethodArgCallback(CallbackScheduler *scheduler, C *obj, Tm method, A arg) : SimpleCallback(scheduler), obj_(obj), method_(method), arg_(arg) { } ~ObjectMethodArgCallback() { } private: void operator() (void) { (obj_->*method_)(arg_); } }; template SimpleCallback *callback(C *obj, typename ObjectMethodCallback::method_t method) { SimpleCallback *cb = new ObjectMethodCallback(NULL, obj, method); return (cb); } template SimpleCallback *callback(C *obj, void (C::*const method)(A), A arg) { SimpleCallback *cb = new ObjectMethodArgCallback(NULL, obj, method, arg); return (cb); } template SimpleCallback *callback(CallbackScheduler *scheduler, C *obj, typename ObjectMethodCallback::method_t method) { SimpleCallback *cb = new ObjectMethodCallback(scheduler, obj, method); return (cb); } template SimpleCallback *callback(CallbackScheduler *scheduler, C *obj, void (C::*const method)(A), A arg) { SimpleCallback *cb = new ObjectMethodArgCallback(scheduler, obj, method, arg); return (cb); } #endif /* !EVENT_OBJECT_CALLBACK_H */