我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?
相比
double average = CalculateAverage(values.begin(), values.end());
Run Code Online (Sandbox Code Playgroud)
同
double average = std::for_each(values.begin(), values.end(), CalculateAverage());
Run Code Online (Sandbox Code Playgroud)
使用函子而不是函数有什么好处?是不是第一个更容易阅读(甚至在添加实施之前)?
假设仿函数定义如下:
class CalculateAverage
{
private:
std::size_t num;
double sum;
public:
CalculateAverage() : num (0) , sum (0)
{
}
void operator () (double elem)
{
num++;
sum += elem;
}
operator double() const
{
return sum / num;
}
};
Run Code Online (Sandbox Code Playgroud) 在wikipedia 关于函数对象的文章中,它说这些对象在与for_each一起使用时具有性能优势,因为编译器可以"内联"它们.
我对这在这种情况下的意义有点模糊......或者我不好意思说的任何背景.谢谢你的帮助!
最近我注意到 C++ std::less 是一个类,尽管它只是比较两个对象的值。下面是示例代码:
template <class T> struct less {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
Run Code Online (Sandbox Code Playgroud)
那么定义类而不是函数有什么好处呢?我还想知道为什么尽管类中没有数据成员却使用“const”关键字?