将一个函数绑定到一个对象 ,代码如下:
#include <iostream>
#include <stdio.h>
using namespace std;
template<typename T>
T f(T num)
{
return num;
}
template<typename T>
class P1
{
public:
P1(T(*a)(T))
{
func_ = a;
}
void Run(T value)
{
cout<< (*func_)(value)<<endl;
}
private:
T (*func_)(T);
};
template<typename T>
P1<T> *getP1(T(*p)(T) )
{
return new P1<T>(p);
}
int main()
{
P1<string> *p = getP1<string>(&f);
P1<int> *p2 = getP1<int>(&f);
p->Run("okaaaaa");
p2->Run(80);
return 0;
}
将一个对象的函数绑定到另外一个对象(提交任务)
#include <iostream>
#include <stdio.h>
using namespace std;
template<typename T>
class P2{
public:
T f(T num)
{
return num;
}
};
template<typename T,typename R>
class P1
{
public:
P1(T(R::*a)(T))
{
func_ = a;
}
void Run(T value,R *obj)
{
cout<< (obj->*func_)(value)<<endl;
}
private:
T (R::*func_)(T);
};
template<typename T,typename R>
P1<T,R> *getP1(T(R::*p)(T) )
{
return new P1<T,R>(p);
}
int main()
{
P2<string> *pp = new P2<string>();
P1<string,P2<string> > *p = getP1<string,P2<string> >(&P2<string>::f);
p->Run("okaaaaa",pp);
return 0;
}