|
这两天用到了一个需要使用指针回调的地方。以前用函数指针,函数必须是静态的。对于类实例的函数指针,以前没有写过。于是查了点资料,找到了方法,但是没有boost的bind好使,不过代码较为简单,简单的满足一下应该足够了。
在这里记录一下,以后说不定有用- #include "stdafx.h"
- class CFunData
- {
- public:
- CFunData(int nBase) {m_nBase = nBase; };
- ~CFunData() {};
- void Run(int nRet)
- {
- printf("[Run]base(%d), All(%d) OK!\n", m_nBase, m_nBase + nRet);
- }
- private:
- int m_nBase;
- };
- class CFPoint
- {
- public:
- typedef void (CFunData::*FuncP)(int);
- FuncP m_FuncP;
- CFunData* m_pFunData;
- public:
- CFPoint() { m_pFunData = NULL; };
- ~CFPoint() {};
- bool Bind(CFunData* pFunData, FuncP pFn)
- {
- m_pFunData = pFunData;
- m_FuncP = pFn;
- return true;
- };
- void Run(int nData)
- {
- if(m_pFunData != NULL)
- {
- (m_pFunData->*m_FuncP)(nData);
- }
- }
- };
- //void (CFunData::*FuncP)(int);
- //FuncP = &CFunData::Run;
- //(FunData.*FuncP)(10);
- int _tmain(int argc, _TCHAR* argv[])
- {
- CFunData FunData1(10);
- CFunData FunData2(20);
- CFPoint FPoint1;
- CFPoint FPoint2;
- FPoint1.Bind(&FunData1, &CFunData::Run);
- FPoint1.Run(20);
- FPoint2.Bind(&FunData2, &CFunData::Run);
- FPoint2.Run(15);
- getchar();
- return 0;
- }
复制代码
运行测试结果:
[Run]base(10), All(30) OK!
[Run]base(20), All(35) OK! |
|