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

前端之家收集整理的这篇文章主要介绍了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&C++相关文章