UIDelegate.h ( 文件浏览 )
- keepall 发布于 2016-08-23 13:24
- 浏览次数:454
- 下载次数: 1
- 下载需 20 积分
-
- 侵权举报
#ifndef __UIDELEGATE_H__ #define __UIDELEGATE_H__ #pragma once namespace DuiLib { class UILIB_API CDelegateBase { public: CDelegateBase(void* pObject, void* pFn); CDelegateBase(const CDelegateBase& rhs); virtual ~CDelegateBase(); bool Equals(const CDelegateBase& rhs) const; bool operator() (void* param); virtual CDelegateBase* Copy() = 0; protected: void* GetFn(); void* GetObject(); virtual bool Invoke(void* param) = 0; private: void* m_pObject; void* m_pFn; }; class CDelegateStatic: public CDelegateBase { typedef bool (*Fn)(void*); public: CDelegateStatic(Fn pFn) : CDelegateBase(NULL, pFn) { } CDelegateStatic(const CDelegateStatic& rhs) : CDelegateBase(rhs) { } virtual CDelegateBase* Copy() { return new CDelegateStatic(*this); } protected: virtual bool Invoke(void* param) { Fn pFn = (Fn)GetFn(); return (*pFn)(param); } }; template <class O, class T> class CDelegate : public CDelegateBase { typedef bool (T::* Fn)(void*); public: CDelegate(O* pObj, Fn pFn) : CDelegateBase(pObj, &pFn), m_pFn(pFn) { } CDelegate(const CDelegate& rhs) : CDelegateBase(rhs) { m_pFn = rhs.m_pFn; } virtual CDelegateBase* Copy() { return new CDelegate(*this); } protected: virtual bool Invoke(void* param) { O* pObject = (O*) GetObject(); return (pObject->*m_pFn)(param); } private: Fn m_pFn; }; template <class O, class T> CDelegate<O, T> MakeDelegate(O* pObject, bool (T::* pFn)(void*)) { return CDelegate<O, T>(pObject, pFn); } inline CDelegateStatic MakeDelegate(bool (*pFn)(void*)) { return CDelegateStatic(pFn); } class UILIB_API CEventSource { typedef bool (*FnType)(void*); public: ~CEventSource(); operator bool(); void operator+= (CDelegateBase& d); void operator+= (FnType pFn); void operator-= (CDelegateBase& d); void operator-= (FnType pFn); bool operator() (void* param); protected: CStdPtrArray m_aDelegates; }; } // namespace DuiLib #endif // __UIDELEGATE_H__
...
展开> <收缩
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^ Sponsored links