更新时间:2016-04-27 18:12:07浏览次数:1+次
#include "iostream"
#include "windows.h"
class Function
{
int y;
public:
Function(int x): y(x){};
public:
double operator()(double x)
{
return x+2*y;
}
};
int main()
{
using namespace std;
Function myFunc(1);
cout<<myFunc(2.0)<<endl;
system("pause");
}
我们定义了一个function类的对象myFunc,并传入一个参数,而后程序会自动为我们调用Function类中的operator()(//传入一个参数)。#include "iostream"
#include "list"
#include "iterator"
#include "algorithm"
using namespace std;
template<class T>
class TooBig
{
private:
T cutoff;
public:
TooBig(const T & t): cutoff(t){}
bool operator()(const T & v){
return v > cutoff;
}
};
void outint(int n){std::cout<<n<<" ";}
int main()
{
TooBig<int> f100(100);
int vals[10]={50,100,90,180,60,120,415,88,188,201};
list<int>yadayada(vals,vals+10);
list<int>etc(vals,vals+10);
cout<<"原始的list:"<<endl;
for_each(yadayada.begin(),yadayada.end(),outint);
cout<<endl;
for_each(etc.begin(),etc.end(),outint);
cout<<endl;
yadayada.remove_if(f100);
TooBig<int> f200(200);
etc.remove_if(f200);
cout<<"改变之后的list:"<<endl;
for_each(yadayada.begin(),yadayada.end(),outint);
cout<<endl;
for_each(etc.begin(),etc.end(),outint);
cout<<endl;
system("pause");
return 0;
}
然后看看实现:template <class T>
bool tooBig(const T& val, const T& lim)
{
return val>lim;
}
然后,我们将其转化为单个参数的函数对象:template<class T>
class TooBig2
{
private:
T cutoff;
public:
TooBig2(const T& t):cutoff(t){}
bool operator()(const T& v)
{
return tooBig<T>(v,cutoff);
}
}
因此原来的代码就可以这么理解:TooBig2<int> tb100(100);
int x;
cin>>x;
if(tb100(x))//就像是调用tooBig(x,100)一样
{
....
}
而类TooBig2就相当于一个函数适配器。相关资讯