如何从仿函数调用重载数据类型
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.
中存在过载
您提供了一个转换运算符,因此调用它。
调用仿函数:
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.
您提供了一个转换运算符,因此调用它。