C++ 如何在c+;中创建一个同时接受float和double的函数+;
我不知道这是否可能,但我想让这个计算向量平均值的函数同时接受float和double。有没有办法做到这一点?谢谢C++ 如何在c+;中创建一个同时接受float和double的函数+;,c++,C++,我不知道这是否可能,但我想让这个计算向量平均值的函数同时接受float和double。有没有办法做到这一点?谢谢 #包括 #包括 #包括 整数平均值(标准::向量变量) { 整数=变量大小(); int varAcc=std::累加(变量begin(),变量end(),0); 返回varAcc/编号; }``` 您可以使用模板使其适用于所有类型 template<typename T> T mean(const std::vector<T>& var) {
#包括
#包括
#包括
整数平均值(标准::向量变量)
{
整数=变量大小();
int varAcc=std::累加(变量begin(),变量end(),0);
返回varAcc/编号;
}```
您可以使用模板使其适用于所有类型
template<typename T>
T mean(const std::vector<T>& var)
{
int number = var.size();
T varAcc = std::accumulate(var.begin(), var.end(), T{});
return varAcc / number;
}
模板
T平均值(常数标准::向量和变量)
{
整数=变量大小();
T varAcc=std::accumulate(变量begin(),变量end(),T{});
返回varAcc/编号;
}
这就是如何编写更少的代码,并在支持函数模板和模板类中使用的操作的类型上工作。在某种意义上,答案已经在代码中了。看看
std::acculate
,它是一个模板,它使用迭代器作为参数,这使它能够累积任何类型的元素,您可能想用float
//
和0替换/0.f
/T{}
。如果您想要两种不同类型的函数,然后有许多或多或少复杂的解决方案,简单的一个总是提供两个重载如何在c++
中创建一个同时接受float和double的函数:void foo(float,double)
是您的问题,您已经没有得到实际函数的预期结果,因为varAcc
返回值是int
,因此我截断了结果。或者,这个目标是截断的,并且您想扩展这个函数也接受一个<代码> STD::vector < /代码>,除了<代码> STD::vector < /代码>?请考虑这个:您的代码为<代码>双< /代码>或“代码>浮标 >替换<代码> 0代码>代码> > <代码> t{} /代码>如果您更改了通过值,则应考虑使用<代码> const 不仅因为var
在mean
函数中没有更改,而且因为您的mean
函数现在不接受临时值。我明白了,我正在更改。