Как перегруженный тип данных вызывается из функтора
Звоните функтору:
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;
}
};
2 ответа
Как и где вызывается double() const?
std::for_each
возвращает объект функции.
Обычно это делается так:
CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());
Но в вашем случае average
превращается в double
из-за перегрузки, присутствующей в вашем классе.
Вы указали оператор преобразования, благодаря которому он вызывается.
Как и где вызывается double() const?
перегрузка std::for_each
вы используете функтор возврата, который вы передали в качестве третьего параметра. Когда он возвращается, компилятор применяет пользовательское преобразование. В вашем случае это неявно, поэтому нет необходимости в приведении.
Вы можете сделать это явным, тогда вам придется привести результат к удвоению:
explicit operator double() const
а также:
double average=static_cast<double>(std::for_each(values.begin(),values.end(),CalculateAverage()));