0

我看到许多用 定义的“复合”概念的例子&&,但没有在哪里||使用。这让我想知道使用||. 在我看来,使用||将允许指定一个具有类似于重载(即临时多态性)效果的概念,但具有一组封闭的可能性。

对于一组“原始”概念 C1,...,CN,写成

 C1 || ... || CN

作为“复合”概念?

4

2 回答 2

3

来自cpprenference

约束

约束是指定模板参数要求的一系列逻辑操作。它们可以出现在 requires-expressions(见下文)中,也可以直接作为概念体出现。有 9 种类型的约束:

  1. 连词
  2. 析取
  3. 谓词约束
  4. 表达式约束(仅在需要表达式中)
  5. 类型约束(仅在 requires 表达式中)
  6. 隐式转换约束(仅在 requires 表达式中)
  7. 参数推导约束(仅在 requires 表达式中)
  8. 异常约束(仅在 requires 表达式中)
  9. 参数化约束(仅在需要表达式中)

析取

约束 P 和 Q 的分离被指定为 P || Q. 如果满足任一约束,则满足两个约束的分离。析取从左到右评估并短路(如果满足左约束,则不尝试将模板参数推导到右约束中)。用户定义的运算符重载|| 在约束析取中是不允许的。

于 2015-08-27T12:44:17.127 回答
2

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

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

于 2015-09-03T18:46:02.890 回答