C++函数对象

先贴一段代码

来自于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);//调用模式像是函数对象的赋值,其实是对象的()函数
}

原文地址:https://www.cnblogs.com/lobsterIT/p/2700552.html