c++委托-2

在上篇文章的基础上,来对例子进行改进,改成使用成员函数指针及类模板的方式来进行

#include <iostream>
using namespace std;
class Sample
{
public:
	void printSum(int a,int b)
		{
			cout<<"a+b="<<a+b<<endl;
		}
};

template<typename T>//使用模板
class DelegateHandler
{
private:
	T* m_pT;
	void (T::*m_pFunc)(int,int);//成员函数指针

public:
	DelegateHandler(T *pT,void(T::*pFunc)(int,int)):m_pT(pT),m_pFunc(pFunc)//构造函数
		{
		}
	void Invoke(int value1,int value2)
		{
		(m_pT->*m_pFunc)(value1,value2);
		}
};

int main()
{
	Sample s;
	DelegateHandler<Sample> cc(&s,&Sample::printSum);
	cc.Invoke(3,4);
}

运行结果:

a+b=7

这样做了改进,但是貌似还不够通用,首先应该能够实现多委托

猜你喜欢

转载自blog.csdn.net/qq_41903811/article/details/88392577