gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:58:46 24 4
gpt4 key购买 nike

使用 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


使用折叠表达式:

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

DEMO 2

关于c++ - 使用 std::ostream 打印可变参数包的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27375089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com