我需要为可变长度模板参数输出(cout)所有args。 提前致谢。
template <class... Args>
void print(Args &&... args)
{
cout << sizeof...(args) << endl;
//how to traverse ...args
//expect output :1,2,3,4,5,6,7,8
}
int main()
{
print(1, 2, 4, 5, 6, 7, 8);
return 0;
}
答案 0 :(得分:2)
#include <iostream>
template <class T>
void print (T&& t) {
std::cout << t << '\n';
}
template <class T, class... Args>
void print(T&& t, Args &&... args) {
std::cout << t << ',';
print(args...);
}
int main() {
print(1, 2, 4, 5, 6, 7, 8);
return 0;
}
请注意,这会在每个元素打印时调用cout
一次,理想情况下,您构建一个字符串并调用cout
一次。
但那是你的意思:)。
答案 1 :(得分:1)
以下是使用C ++ 17的示例代码
#include <iostream>
template <class T, class... Args>
void print(T&& t, Args &&... args)
{
std::cout << t;
((std::cout << ", " << std::forward<Args>(args)), ...) ;
std::cout << '\n';
}
int main()
{
print(1, 2, 4, 5, 6, 7, 8);
print(9);
return 0;
}
并不是说我觉得它在某种程度上优于公认的答案。只是为了完成......