Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 现代C++;实现具有可变数量int参数的函数的最佳方法_C++_C++11_C++14_C++17_Variadic Templates - Fatal编程技术网

C++ 现代C++;实现具有可变数量int参数的函数的最佳方法

C++ 现代C++;实现具有可变数量int参数的函数的最佳方法,c++,c++11,c++14,c++17,variadic-templates,C++,C++11,C++14,C++17,Variadic Templates,在现代C++中(即版本>=11),实现具有多个int参数的函数的最佳方法是什么 我只想要ints,而不是一般类型。 每个参数都是int类型,不允许使用其他类型 void foo(/*WHAT'S HERE*/) { // and how do I access the arguments here? } int main() { foo(34,1); foo(9,2,66,1); // etc return 0; } 最好的办法是使用可变函数 template<type

在现代C++中(即版本>=11),实现具有多个int参数的函数的最佳方法是什么

我只想要
int
s,而不是一般类型。

每个参数都是int类型,不允许使用其他类型

void foo(/*WHAT'S HERE*/) {
// and how do I access the arguments here?
}

int main()
{
  foo(34,1);
  foo(9,2,66,1);
  // etc
  return 0;
}

最好的办法是使用可变函数

template<typename T, typename ... Args>
return_type Functionname(T arg1, ...)
{ }
模板
返回类型函数名(T arg1,…)
{ }
例如,如果要对可变数量的参数求和,请使用以下方法:

template<typename T, typename... Args>
T adder(T first, Args... args) {
  return first + adder(args...);
}
模板
T加法器(T优先,Args…Args){
返回第一个+加法器(args…);
}
希望这有帮助

编辑:这个问题可能也有帮助


如何为int执行此操作?我只想要int。第一个代码段中函数参数的语法没有达到预期效果。您正在为(C样式)可变函数声明可变模板。
加法器
示例缺少基本情况,因为C++17折叠表达式是形成该示例的可读性更强的方法。将
typename
替换为
int
会使参数非类型模板参数和上一个代码块的格式不正确,因为
Args
不是类型。@RFS变量模板接受任何参数的任何类型,因此它可以与
int
参数配合使用。如果您的问题是如何将变量模板限制为只接受
int
作为参数,那么您应该在问题中澄清这一点。@GokuMizuno“将所有typename替换为int”不可能吗?我在重复列表中添加了另一个问题,其中包括将参数限制为int为什么不传入
向量
?为什么不这样做:@M.M许多,许多,…,许多谢谢。下面的代码在C++17中运行,非常漂亮<代码>模板typename std::enable_if::type foo(U…ints){const int size=sizeof…(ints);int intarray[size]={ints…};}
@RFS情人眼里出西施:)