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());