【问题标题】:Where is the fold expression ()?折叠表达式 () 在哪里?
【发布时间】:2021-10-20 07:40:05
【问题描述】:

参考fluentCPP article

下面的代码解释说这个结构继承自几个 lambda,可以从这些 lambda 构造,并折叠 using 表达式。

template<typename... Lambdas>
struct overloaded : public Lambdas...
{
    explicit overloaded(Lambdas... lambdas) : Lambdas(lambdas)... {}

    using Lambdas::operator()...;
};

我怀疑括号即 () 表示 c++17 折叠表达式,但我没有看到 using 语句周围的任何括号。它将如何折叠?

【问题讨论】:

  • 文章有误,这里没有折叠表达式,只是很好的 ol' 包扩展。

标签: c++ c++17 fold-expression


【解决方案1】:

这不是折叠表达式。在类范围内不能有任何表达式语句。正如您所指出的,折叠表达式语法中没有括号。

这是一个带有参数包扩展的声明。包扩展可以用在更多的上下文中,而不仅仅是折叠表达式。

这个语句会做什么?

它会声明

using L::operator();

对于参数包Lambdas中的每个类型L

通常 using 和 typedef 一样

这不是该关键字的唯一用例。在这种情况下,它用于将基类的成员(函数)引入派生类。

【讨论】:

  • @HolyBlackCat 已更正。参数包扩展一般在 C++11 中,但显然在使用声明中使用它们是在 C++17 中引入的。
  • 您能否详细说明您对我的问题的回答?
  • @Test 您的问题How will it fold? 的答案是它不会折叠,因为它不是折叠。您的问题Where is the fold expression ()? 的答案是示例中没有折叠表达式。
  • 这个语句会做什么?使用 Lambdas::operator()...;通常 using 与 typedef 使用相同,但在这里我不清楚它的用法。
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2021-05-13
相关资源
最近更新 更多