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

时间:2017-01-27 09:19:45

标签: c++ operator-overloading functor

致电仿函数:

   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;
   }
};

2 个答案:

答案 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

您提供了一个转换操作符,因为它被调用。