#include <iostream>
using namespace std;
template<typename T>
class A
{
private:
typedef int (T::*delegateFun)(int);
T * _This;
delegateFun _deleGate;
public:
//This±»´úÀíµÄ¶ÔÏó, delegateFun±»´úÀíµÄ·½·¨
A(T *This, int (T::*pFunc)(int))
{
_This = This;
_deleGate = pFunc;
}
//c±»´úÀíµÄ²ÎÊý
int execue(int c)
{
return (_This->*_deleGate)(c);
}
};
class B
{
public:
int FunA(int a) {return a + 10;}
int FunB(int a) {return a - 10;}
B()
{
}
};
int main(int argc, char *argv[])
{
B *objB = new B();
A<B> delegateObj1(objB, (&B::FunA));
A<B> delegateObj2(objB, (&B::FunB));
cout << delegateObj1.execue(10) <<endl;
cout << delegateObj2.execue(20) <<endl;
return 0;
}