1

让我们看一个简单的函子

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));

我对仿函数术语的理解是,类LessThan是仿函数。即它是一个类型,而不是一个对象。即它是抽象的,而不是具体的。

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

这不是很荒谬吗?

4

1 回答 1

1

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

请注意,您的仿函数是一个函数(即“小于”)及其参数之一(即int val)的组合。通过函子组合可以达到同样的效果:

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

演示。

于 2016-07-02T18:15:48.927 回答