【发布时间】:2016-12-20 07:32:12
【问题描述】:
void foo(std::string arg, ...) {
// do something with every argument
}
假设我希望能够获取每个字符串参数并在将其打印到新行之前附加一个感叹号。
【问题讨论】:
-
简单的答案是您不能。没有允许您枚举或迭代参数的标准功能。这就是为什么 vararg 函数需要包含有关其余参数的信息的特殊参数,例如
printf格式字符串。你可以通过传递一个额外的第一个整数参数来解决它,它的值是字符串参数的数量。或者,由于您使用 C++ 编程,您可以使用模板和 parameter packs。 -
那么有一个小问题是它是未定义的行为来传递一个可变参数函数任何不是内置类型的东西......