微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/c/113681.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐