一个函数对象:

A function object:

函数对象:

  1. 是一个 class 的实例,其中 operator () 是一个成员函数。
  2. 是一个 class 的实例,运算符 --> 是其成员函数。
  3. 是指向任意函数的指针
  4. 是class
  5. 的成员函数

我的尝试:

函数对象或函子(这两个术语是同义词)只是任何可以像调用函数一样调用的对象。普通函数是函数对象,函数指针也是;更一般地说,定义 operator().

的 class 的对象也是如此

仿函数(Function Objects or Functionals)就是把object + ().

我觉得选项(3)是正确的,但我对选项(1)感到困惑,这是真的吗?

Can you explain it, please?

一个函数对象是class的一个实例,它将括号运算符定义为成员函数。当函数对象用作函数时,每当调用函数时都会调用括号运算符。考虑以下 class 定义:

class biggerThanThree 
 {
   public:
   bool operator () (int val)
   { return val > 3; }
};

如果我们创建一个class biggerThanThree的实例,每次我们使用函数调用语法引用这个对象时,都会调用括号运算符成员函数。


参考:

  1. http://www.cplusplus.com/reference/functional/binary_function/
  2. https://msdn.microsoft.com/en-in/library/aa985932.aspx