【问题标题】:How to create a function with an unknown number of parameters? [duplicate]如何创建具有未知数量参数的函数? [复制]
【发布时间】:2020-05-21 13:44:17
【问题描述】:

我需要创建一个函数来计算 int 类型的平均值。如何做得更好?

例子:

   double calculate_average(int num1, ...) {
      .... 
      return sum / count;
   }

   int main() {
     calculate_average(5, 4, 3, 2, 1);
     calculate_average(3, 2); 
   }

【问题讨论】:

标签: c++


【解决方案1】:

您可以为此使用fold expressions

template<typename ...Ts>
double calculate_average(Ts... ts)
{
  return (((double)ts / sizeof...(ts)) + ... + 0);
}

注意sizeof...(ts),是一个单独的参数包原语。它不是一个包扩展,而是给出传递给函数的参数的个数

这是demo

【讨论】:

  • 成功了!但是如果调用如何解决:calculate_average(2147483647, 1)
  • 试试calculate_average(2147483647l, 1);。毕竟你传入的参数反正不是ints,所以还不如传入longs。
  • @cigien 你也可以用return (((double)ts/sizeof...(ts)) + ...);修复你的计算
  • @NathanOliver 谢谢。编辑了一个选项。这应该至少将所有参数转换为doubles。
  • @NathanOliver 但不处理溢出,所以添加了该选项,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多