void foo(std::string arg, ...) {
// do something with every argument
}
让我们说我希望能够获取每个字符串参数并附加一个感叹号,然后再在新行上打印出来。
答案 0 :(得分:5)
最好的方法是使用parameters pack。例如:
#include <iostream>
// Modify single string.
void foo(std::string& arg)
{
arg.append("!");
}
// Modify multiple strings. Here we use parameters pack by `...T`
template<typename ...T>
void foo(std::string& arg, T&... args)
{
foo(arg);
foo(args...);
}
int main()
{
// Lets make a test
std::string s1 = "qwe";
std::string s2 = "asd";
foo(s1, s2);
std::cout << s1 << std::endl << s2 << std::endl;
return 0;
}
这将打印出来:
qwe!
asd!
答案 1 :(得分:0)
这是一个迭代的解决方案。函数调用中有些杂音,但是不需要计算可变参数的数量。
ASTextNode
答案 2 :(得分:0)
将parameter pack
与fold expression
一起使用:
#include <iostream>
#include <string>
// Modify multiple strings. Here we use parameters pack by `...T`
template<typename ...T>
void foo(T&... args)
{
(args.append("!"),...);
}
int main()
{
// Lets make a test
std::string s1 = "qwe";
std::string s2 = "asd";
foo(s1, s2);
std::cout << s1 << std::endl << s2 << std::endl;
return 0;
}