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

使用std :: ostream打印参数包最简单的方法是用逗号分隔?

例:

template<typename... Args>
void doPrint(std::ostream& out,Args... args){
   out << args...; // WRONG! What to write here?
}

// Usage:
int main(){
   doPrint(std::cout,34,"bla",15); // Should print: 34,bla,15
}

注意:
可以假设相应的过载为<运算符可用于所有类型的参数包.

解决方法

另外一种替代方案,不需要递归调用和逗号:
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)...};
}

DEMO

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...