如何从仿函数调用重载数据类型

how overloaded datatype is getting called from functor

调用仿函数:

   double average=std::for_each(values.begin(),values.end(),CalculateAverage());

以上代码将调用仿函数 CalculateAverage,

但从 "void operator () (double elem)" 内部, "operator 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;
   }
};

How and where double() const is getting called ?

std::for_each 的重载您正在使用作为第三个参数传递的 returns 仿函数。返回时,编译器正在应用用户定义的转换。在您的情况下,它是隐式的,因此无需强制转换。

您可以将其显式化,然后您必须将结果转换为 double:

explicit operator double() const

和:

double average=static_cast<double>(std::for_each(values.begin(),values.end(),CalculateAverage()));

How and where double() const is getting called ?

std::for_each returns 函数对象。

通常是这样做的:

CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());

但是在你的情况下 average 被转换为 double 因为你的 class.

中存在过载

您提供了一个转换运算符,因此调用它。