有可能用C++编写一个通用算术函数吗

  • 本文关键字:一个 函数 C++ 有可能 c++
  • 更新时间 :
  • 英文 :


我想写一组通用算术函数,这些函数可以作用于通过is_arrithmic测试的任何类型。例如,这个最小函数是可以的:

template<typename T>
T min(std::vector<T> values)
{
T min = values.at(0);
for (T& value : values)
{
if (value < min) {
min = value;
}
}

return min;
}

但是,一个对值向量求平均值的函数呢:

template<typename T>
T average(std::vector<T> values)
{
long double sum = 0;
for (T& value : values)
{
sum += value;
}
return sum / values.size();
}

这显然不会编译,因为泛型类型不能与具体类型交互。在我的情况下,传入类型可以是从int8到double的任何类型,我希望避免为每种类型编写本质上相同的函数。这个问题有一个优雅的解决方案吗?

将sum声明为T sum = 0;,您将获得所需内容。如果您需要总和与vector保持的类型不同,则使用第二个模板参数,例如template<class T, class U> U average(std::vector<T> values);。不过,在调用该函数时,您必须指定U

注意-这些是模板,而不是泛型。因此,将具体类型与模板化类型混合是完全可以的——尽管这当然会限制模板参数的内容。

最新更新