在上篇文章的基础上,来对例子进行改进,改成使用成员函数指针及类模板的方式来进行
#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
这样做了改进,但是貌似还不够通用,首先应该能够实现多委托