函子相关术语
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)
我们来看一个简单的函子
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)