C++ 如何从functor调用重载的数据类型
调用函子:C++ 如何从functor调用重载的数据类型,c++,operator-overloading,functor,C++,Operator Overloading,Functor,调用函子: double average=std::for_each(values.begin(),values.end(),CalculateAverage()); 上面的代码将调用函子CalculateAverage 但是从“void操作符()(双元素)”的内部, 调用“运算符double()const”的位置 函子的定义如下: class CalculateAverage { private: std::size_t num; double sum; public:
double average=std::for_each(values.begin(),values.end(),CalculateAverage());
上面的代码将调用函子CalculateAverage
但是从“void操作符()(双元素)”的内部,
调用“运算符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;
}
};
调用double()常量的方式和位置
std::for_each
的重载将返回作为第三个参数传递的函子。返回时,编译器正在应用用户定义的转换。在您的情况下,它是隐式的,因此不需要强制转换
您可以将其显式化,然后必须将结果强制转换为双精度:
explicit operator double() const
以及:
double average=static_cast(std::for_each(values.begin()、values.end()、CalculateAverage());
调用double()常量的方式和位置
返回函数对象
通常是这样做的:
CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());
但是在你的例子中,average
被转换为double
,因为你的类中存在过载
您提供了一个转换运算符,因此它被调用。冷静。并试着清楚地表达你的问题。你试过阅读吗?对不起,我的意思是说这个声明“operator double()const”在哪里被调用,谁在调用它
CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());