1
50
这些被称为 Variadic functions . 维基百科列表 example code for C++ .
|
2
20
真正的C++解决方案是可变模板。您将需要一个相当新的编译器,并在需要时启用C++11支持。 有两种方法可以处理“对所有函数参数执行相同的操作”问题:递归方式和丑陋(但非常符合标准)的解决方案。 recursive solution 看起来有点像这样:
它为每个参数集合生成一个符号,然后为递归的每个步骤生成一个符号。这至少可以说是次优,所以 the awesome C++ people here at SO 想到 a great trick abusing the side effect of a list initialization
不会为一百万个略有不同的模板实例化生成代码,另外,您可以保留函数参数的顺序。有关此解决方案的详细信息,请参见另一个答案。 |
3
13
在C++11及更高版本中,还可以使用初始值设定项列表。
|
4
6
您可以模拟某种可变参数->向量事物:
用法:
|
5
3
Variadic functions in C, Objective-C, C++, and D
你需要包括
stdarg.h
然后使用
|
6
1
如果你不关心可移植性,你可以移植 this C99 code gcc's statement expressions :
您可以对C++0x'lambda表达式执行类似的操作,但我使用的gcc版本(4.4.0)不支持它们。 |
7
1
GManNickG和Christoph的答案是好的,但变量函数允许您按
...
参数,而不仅仅是整数。如果你
将
将来
,以推送
不同的
在不使用变量函数的情况下键入函数,因为它对您来说太难或太复杂,或者您不喜欢使用它的方式,或者您不想包含使用它所需的标题,那么您始终可以使用
例如,Stephan202发布了:
这也可以写成:
现在这样使用它:
完整代码:
输出:
|
8
0
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |