是否可以在折叠表达式中插入额外的操作?

r0n*_*0ng 11 c++ templates variadic-templates fold-expression c++17

在C++ 17中,fold表达式可用,因此要打印参数,我们可以使用

#define EOL '\n'

template<typename ...Args>
void output_argus(Args&&... args) 
{
    (cout << ... << args) << EOL;
}


int main()
{
    output_argus(1, "test", 5.6f);
}
Run Code Online (Sandbox Code Playgroud)

有输出
1test5.6

如果我想使用fold表达式'\n'为每个元素添加额外的字符以获得以下结果,该怎么办?

1
test
5.6
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?如果有,怎么样?

max*_*x66 13

如果我想使用fold表达式为每个元素添加额外字符'\n'以获得以下结果,该怎么办?

您可以使用逗号运算符的强大功能

 ((std::cout << args << std::endl), ...);
Run Code Online (Sandbox Code Playgroud)

或者,正如Quentin所建议的那样(感谢),正如您所问,您可以简单地使用\n而不是std::endl(避免多次刷新流)

 ((std::cout << args << '\n'), ...); 
Run Code Online (Sandbox Code Playgroud)

  • `std :: endl`完全矫枉过正,OP只想要换行. (3认同)