【问题标题】:How to Insert spaces in (cout << ... << args) using fold expressions?如何使用折叠表达式在 (cout << ... << args) 中插入空格?
【发布时间】:2018-02-13 06:33:37
【问题描述】:

给定

template<typename ...Types>
void print(Types&& ...args) {
    (cout << ... << args);
}
// ....
print(1, 2, 3, 4); // prints 1234

如何添加空格以便得到1 2 3 4?

更新:

正确答案: ((std::cout &lt;&lt; args &lt;&lt; ' ') , ...);

【问题讨论】:

  • 这不是折叠表达式的用途。
  • 好的,正式的问题来了:如何在函数参数包中间添加任意新项?
  • 这不是函数参数包的用途;)我在开玩笑,但我有点认真。参数包是用于非常特定的工作的非常特定的工具,解包它们是非常有限的。当它们正是您需要的时候,它们会很好地工作,从而生成干净且易于理解的代码。当它们与您所需要的完全不同时,您就不会使用它们。但是当它们几乎满足你的需要时,它们就无法使用了。
  • 你是对的,这是有道理的。定义是“函数参数包是接受零个或多个函数参数的函数参数”。我们不能在函数参数中间添加一些东西。

标签: c++17 fold-expression


【解决方案1】:

通常的解决方法是折叠逗号运算符,但简单的方法会留下一个尾随空格:

((std::cout << args << ' '), ...);

更改它以避免尾随空格留给读者作为练习。

【讨论】:

  • a.cpp:11:24: error: binary expression in operand of fold-expression (std::cout &lt;&lt; args &lt;&lt; ' ', ...); 我明白了
  • 你需要一对额外的括号,((std::cout &lt;&lt; args &lt;&lt; ' ') , ...)
猜你喜欢
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多