先贴一段代码
来自于C++沉思录
#include<iostream>
using namespace std;
int f(int){
cout<<"f:a\t"<<10<<"lalla...\n";
return 1;
}
void g(){
cout<<"wocao"<<endl;
}
//建立类模板 Com_base
template<class G,class F>
class Com_base{
public:
virtual F operator()(G)=0;
virtual ~Com_base(){}
};
创建类Comp 继承自Com_base
template<class T,class T1,class G,class F>
class Comp:public Com_base<G,F>{
T t0;
T1 t1;
public:
Comp(T t0,T1 t1):t0(t0),t1(t1){}//构造函数
F operator()(G x){
t0(x);
t1();
return 0;
}
};
template<class G,class F>
class Composi{
//T t1;T1 t2;
public:
//template<class T,class T1>
Composi(T t0,T1 t1):p(new Comp<T,T1,G,F>(t0,t1)){}; //新建子类的对象对父类变量进行初始化,这个地方相当于拷贝构造函数,
//这个地方需注意 (*p)调用的()函数是子类的而不是父类的 ,详见虚函数的使用。
~Composi(){delete p;};
F operator()(F x){return (*p)(x);};//()运算符
private:
Com_base<G,F> *p; //成员变量为 父类Com_base类的指针。
};
void main(){
Composi<int,int>fg(f,g);
fg(454);//调用模式像是函数对象的赋值,其实是对象的()函数
}