C++17 折叠表达式的经典示例是打印所有参数:
template<typename ... Args>
void print(Args ... args)
{
(cout << ... << args);
}
例子:
print("Hello", 12, 234.3, complex<float>{12.3f, 32.8f});
输出:
Hello12234.3(12.3,32.8)
我想在我的输出中添加换行符。但是,我找不到这样做的好方法,这是迄今为止我发现的最好的方法:
template<typename ... Args>
void print(Args ... args)
{
(cout << ... << ((std::ostringstream{} << args << "\n").str()));
}
然而,这不是零开销,因为它ostringstream
为每个参数构造了一个临时的。
以下版本也不起作用:
(cout << ... << " " << args);
error: expression not permitted as operand of fold expression
和
(cout << ... << (" " << args));
error: invalid operands to binary expression
我明白为什么最后两个版本不起作用。使用折叠表达式是否有更优雅的解决方案来解决这个问题?