函数对象,就是在类中定义operator(),使该类的对象具有函数行为。如:
class X{
public:
return_type operator()(arguments)
{
///
}
};
现在可以将类X的对象像函数一样调用:
X x;
x(arg1,arg2); //x调用operator()
上述调用等同于:
x.operator()(arg1,arg2);
例如:
class A{
public:
A(int i):a(i){ } //构造函数
void operator()(int i)
{
std::cout<<a+i<<'\n';
}
private:
int a;
};
/
A a(10);
a(20); //调用方法一
a.operator()(20); //调用方法二
函数对象多与STL中的算法配合使用,用法类似函数指针。下面给一个完全的例子:
/
#include <vector>
#include <algorithm>
#include <iostream>
//函数对象
class fobject{
public:
void operator()(int i)
{
std::cout<<i<<"\n";
}
};
void q(int x)
{
for(int i=0;i<x;++i)
std::cout<<i<<'\n';
}
void fpointer(void (*s)(int i))
{
s(10); //s是函数指针,
//其指向的函数应具有形式:void f(int i)
}
int main()
{
//调用函数对象
std::cout<<"调用函数对象:\n";
std::vector<int> Vi;
for(int i=0;i<10;++i)
Vi.push_back(i);
//fobject a;
//std::for_each(Vi.begin(),Vi.end(),a);
std::for_each(Vi.begin(),Vi.end(),fobject());
//调用函数指针
std::cout<<"调用函数指针:\n";
fpointer(q);
system("pause");
}