C++ 函数对象


C++ 函数对象

C++ STL 预定义函数对象

简介

函数对象(function object)[note 1]是一个程序设计的对象允许被当作普通函数来调用。

函数对象与函数指针相比,有两个优点:第一是编译器可以内联执行函数对象的调用;第二是函数对象内部可以保持状态。

C++中,函数对象是定义了函数调用运算符的类对象,称作class type functor。

函数对象的特点:

  • 函数对象带有状态:函数对象相对于普通函数是“智能函数”,这就如同智能指针相较于传统指针。因为函数对象除了提供函数调用符方法,还可以拥有其他方法和数据成员。所以函数对象有状态。即使同一个类实例化的不同的函数对象其状态也不相同,这是普通函数所无法做到的。而且函数对象是可以在运行时创建。

  • 每个函数对象有自己的类型:对于普通函数来说,只要签名一致,其类型就是相同的。但是这并不适用于函数对象,因为函数对象的类型是其类的类型。这样,函数对象有自己的类型,这意味着函数对象可以用于模板参数,这对泛型编程有很大提升。

  • 函数对象一般快于普通函数:因为函数对象一般用于模板参数,模板一般会在编译时会做一些优化。

C++ 的函数对象

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Functor
{
public:
int operator()(int a, int b)
{
return a < b;
}
};

int main()
{
Functor f;
int a = 5;
int b = 7;
int ans = f(a, b);
}

C++ STL中的函数对象

相关链接

Lambda 表达式和函数对象

函数对象wiki