Search code examples
c++operator-overloadingfunctor

how overloaded datatype is getting called from functor


Call to functor :

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

Above code will call functor CalculateAverage,

but from inside of "void operator () (double elem)", where "operator double() const" is getting called.

functor is defined like this:

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

Solution

  • How and where double() const is getting called ?

    std::for_each returns the function object.

    Normally it is done like:

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

    But in your case average gets converted to double because of the overload present in your class.

    You have provided a conversion operator due to which it is called.