- 在 C++ 中,函数对象(Function Object)也被称为仿函数(Functor),是一种可以像函数一样被调用的对象,是一个类的对象,该类重载了函数调用运算符
operator()。
函数对象的特点:
-
与普通函数不同,函数对象可以拥有成员变量。这使得函数对象在某些情况下比普通函数更灵活。
-
函数对象可以像普通变量一样作为参数传递给函数可。如
sort
可以接受一个函数对象来定义排序的规则。
函数对象的定义和使用:
class MyFunctor {
public:
int operator()(int a, int b) {
return a + b;
}
};
- 在这个例子中,
MyFunctor
类就是一个函数对象,因为它重载了operator()
运算符。可以像调用函数一样使用这个对象:
MyFunctor f;
int result = f(3, 4);
- 作为函数参数:
void process(int a, int b, MyFunctor f) {
int result = f(a, b);
}
int main() {
MyFunctor f;
process(3, 4, f);
return 0;
}
函数对象与普通函数的区别:
-
存储状态能力:函数对象可以拥有成员变量,因此可以存储状态。普通函数不能存储状态,每次调用时都是独立的,不会保留之前调用的信息。
-
作为参数传递:函数对象和普通函数都可以作为参数传递给其他函数。但是,函数对象可以存储状态,并且可以在不同的调用之间保持状态。普通函数不能存储状态,每次调用时都是独立的。
-
使用方式:函数对象是通过创建对象并调用其
operator()
运算符来使用的。普通函数是通过函数名和参数列表来调用的。