函子相关术语

Terminology surrounding functors

我们来看一个简单的函子

class LessThan {
public:
    explicit LessThan (int in ) : val(in) {}
    bool operator() (int param) const {
        return param < val;
    }
private:
    int val;
};

我可以像这样使用 -

vector<int> myVector = factory();
size_t count = count_if(begin(myVector), end(myVector), LessThan(10));

我对围绕函子的术语的理解是 class LessThan 是一个函子。即它是一种类型,而不是对象。即它是抽象的,而不是具体的。

那么,我们怎么称呼LessThan(10)?在这里,我们通过实例化 LessThan 函子类型来创建一个对象。那么,我们称它为函子对象吗?但是,仿函数是函数对象。所以,LessThan(10) 是一个函数对象对象??

这不是很荒谬吗?

函数对象的术语与常规对象的术语相同:您的函子 LessThan(10) 有一个类型,即 class LessThan

请注意,您的仿函数是一个函数(即 "less than")及其参数之一(即 int val)的组合。通过仿函数组合也可以达到同样的效果:

auto f = bind(less<int>(), _1, 10); // f is LessThan(10)

Demo.