函数对象
定义了调用操作符的类,其对象常称为函数对象,即它们是行为类似函数的对象。
struct absInt
{
int operator() (int val)
{
return val<0 ? –val : val;
}
};
int i=-42;
abdInt absObj;
unsigned int ui=absObj(i);//calls about absInt::operator(int)
函数调用操作符必须声明为成员函数,我们仍然可以“调用”该对象,效果是运行由absObj对象定义的重载调用操作符,该操作符接受一个int值并返回它的绝对值。函数调用操作符必须定义为成员函数,且可以对其重载。
函数对象用于标准库算法,
bool GT6(const string& s)
{
return s.size()>=6;
}
vector<string>::size_type wc=count_if(words.begin(),words.end(),GT6);
使用GT6作为传给count_if 算法的实参,以计算使GT6返回true的单词的数目。
Class GT_cls
{
public:
GT_cls(size_t val=0):bound(vala) { }
bool operator()(const string& s)
{
return s.size()>=bound;
}
private:
std::string::size_type blund;
};
Count_if(words.begin(),words.end(),GT_cls(6))//测试其中字符长度大于6的个数。
标准库定义的函数对象
算数函数对象类型
+ - * / plus<type>
关系函数对象类型
== != > >= < <=
逻辑函数对象类型
&& | !
以上都已经定义为成了模板类,实例化的时候,可以成为函数对象进行使用
还是原来的定义,函数对象,就是行为类似函数的对象,而对象是类的一个实例。。