且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用 std::ostream 打印可变参数包的最简单方法是什么?

更新时间:2023-01-16 07:43:08

无需递归调用和您想要的逗号.

Without recursive calls and commas where you wanted.

/通过参数包扩展:

template <typename Arg, typename... Args>
void doPrint(std::ostream& out, Arg&& arg, Args&&... args)
{
    out << std::forward<Arg>(arg);
    using expander = int[];
    (void)expander{0, (void(out << ',' << std::forward<Args>(args)), 0)...};
}

演示

使用折叠表达式:

template <typename Arg, typename... Args>
void doPrint(std::ostream& out, Arg&& arg, Args&&... args)
{
    out << std::forward<Arg>(arg);
    ((out << ',' << std::forward<Args>(args)), ...);
}

演示 2