致电仿函数:
double average=std::for_each(values.begin(),values.end(),CalculateAverage());
上面的代码将调用仿函数CalculateAverage,
但是来自" void operator()(double elem)"的内部, 其中"运算符double()const"正在被召唤。
仿函数的定义如下:
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;
}
};
答案 0 :(得分:0)
如何以及在何处调用double()const?
您使用的返回函数std::for_each
的重载已作为第三个参数传递。返回时,编译器正在应用用户定义的转换。在你的情况下它是隐含的,所以不需要演员。
您可以将其显式化,然后您必须将结果转换为double:
explicit operator double() const
和
double average=static_cast<double>(std::for_each(values.begin(),values.end(),CalculateAverage()));
答案 1 :(得分:0)
如何以及在何处调用double()const?
std::for_each
返回函数对象。
通常情况如下:
CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());
但是在您的情况下average
会因为您班级中出现过载而转换为double
。
您提供了一个转换操作符,因为它被调用。