使用C++类成员函数作为回调函数

// 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


猜你喜欢

转载自blog.csdn.net/Oyj1020/article/details/51011215