相比
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) 最近我注意到 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”关键字?