定义概念时是否允许OR(' || ')

Is OR (`||`) allowed when defining concepts?

本文关键字:OR 是否 定义      更新时间:2023-10-16

我看到许多使用&&定义"组合"概念的例子,但没有一个使用||。这让我怀疑使用||是否有意义。在我看来,使用||将允许指定一个具有类似于重载(即特设多态性)效果的概念,但具有封闭的可能性集。

对于一组"原始"概念C1,…如:

是否合法?
 C1 || ... || CN

作为"复合"概念?

From cppreference

约束是一个逻辑操作序列,它指定模板参数的要求。它们可以出现在需求表达式(见下文),并直接作为概念的主体这里有9种类型的约束:

  1. 连词
  2. 析取
  3. 谓词限制
  4. 表达式约束(仅在require -expression中)
  5. 类型约束(仅在require -表达式中)
  6. 隐式转换约束(仅在require -表达式中)
  7. 参数演绎约束(仅在require -表达式中)
  8. 异常约束(仅在require -表达式中)
  9. 参数化约束(仅在require -表达式中)

析取

约束p和Q的析取被指定为p || Q。如果任何一个约束满足,则满足两个约束的析取。从左到右计算析取并短路(如果满足左约束,则不会尝试将模板参数演绎到右约束中)。在约束析取中不允许用户定义运算符||的重载。

您可以在约束中使用几乎任何常量表达式(包括||)。唯一的限制是这些表达式必须返回bool

||的一个用途是定义一组已知共享一个公共接口的类型。例如,积分(std::is_integral)可以定义为若干同类型约束(is_same<T, int>)的析取。但我不建议这样做。您应该以一种附加的方式定义概念。