如何遍历... args(可变长度模板参数)

时间:2017-09-26 04:51:06

标签: c++

我需要为可变长度模板参数输出(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;
    }

2 个答案:

答案 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;
}

并不是说我觉得它在某种程度上优于公认的答案。只是为了完成......