// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
template<typename Tobject, typename Tparam>
class CCallbackProxy
{
typedef void (Tobject::*CbFun)(Tparam*);
public:
void Set(Tobject *pInstance, CbFun pFun);
bool Exec(Tparam* pParam);
private:
CbFun pCbFun; //回调函数指针
Tobject* m_pInstance; //调用对象
};
template<typename Tobject, typename Tparam>
void CCallbackProxy<Tobject, Tparam>::Set(Tobject *pInstance , CbFun pFun)
{
m_pInstance = pInstance;
pCbFun = pFun;
};
template<typename Tobject, typename Tparam>
bool CCallbackProxy<Tobject, Tparam>::Exec(Tparam* pParam)
{
(m_pInstance->*pCbFun)(pParam);
return true;
}
class CTest
{
public:
CTest(int nNum);
void CbPrintSum(int *pnAddNum){TRACE("The Sum is %d\n", m_nSum+*pnAddNum);};
private:
int m_nSum;
};
CTest::CTest(int nNum):m_nSum(nNum)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
CCallbackProxy<CTest, int> CbProxy;
CTest TestInstance(20);
CbProxy.Set(&TestInstance, &CTest::CbPrintSum);
int nNum = 1000;
CbProxy.Exec(&nNum);
return 0;
}
转载地址:http://www.cnblogs.com/HeroZearin/articles/2738859.html