【发布时间】:2016-07-02 18:07:17
【问题描述】:
让我们来一个简单的仿函数
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) 是一个函数对象对象??
这不是很荒谬吗?
【问题讨论】:
-
对象是类型。或者更确切地说,它们是类型的实例。用户定义的类是类型,当您实例化它们时,您将获得该类型的对象。
-
@JesperJuhl 对于
int a,...int是一个类型,a是一个对象。因此两者是不同的。 -
如果有帮助,请这样想:
LessThan是一个函数对象类型。LessThan(10)是一个函数对象。
标签: c++ functor function-object