- #ifndef __DELEGATE_H__
- #define __DELEGATE_H__
- // lrhnfs@gmail.com [2011/2/21 YMD] [11:03:54]
- // 简单委托类
- //
- namespace delegate
- {
- // 委托基类
- // Arg: 目标函数参数
- // Invoke: 调用目标函数[虚函数]
- // operator(): 功能=Invoke
- template<typename Arg>
- class DelegateBase
- {
- public:
- virtual void Invoke(Arg* pArg) = 0;
- void operator()(Arg* pArg) { Invoke(pArg); };
- }; // class DelegateBase
- // function类型委托
- // m_method: 目标函数
- template<typename Arg>
- class DelegateFunction
- : public DelegateBase<Arg>
- {
- public:
- typedef void(*Method)(Arg* arg);
- DelegateFunction(Method method)
- : m_method(method)
- { }
- void Invoke(Arg* pArg) { m_method(pArg); }
- Method m_method;
- }; // class DelegateFunction
- // class类型委托
- // T: class类型
- // m_pObject: class对象
- template<typename Arg, typename T>
- class DelegateObject
- : public DelegateBase<Arg>
- {
- public:
- typedef void (T::*Method)(Arg* pArg);
- DelegateObject(T* pObject, Method method)
- : m_pObject(pObject)
- , m_method(method)
- { }
- void Invoke(Arg* pArg) { (m_pObject->*m_method)(pArg); }
- T* m_pObject;
- Method m_method;
- }; // class DelegateObject
- } // namespace delegate
- #endif // __DELEGATE_H__
- //该片段来自于http://www.codesnippet.cn/detail/100420132791.html
来源: http://www.codesnippet.cn/detail/100420132791.html