我看到许多使用&&
定义的“复合”概念示例,但没有使用||
。这让我想知道使用||
是否有意义。在我看来,使用||
将允许指定一个具有类似于重载(即ad-hoc多态)的效果的概念,但具有一组封闭的可能性。
对于一组“原始”概念C1,...,CN,写入
是否有效 C1 || ... || CN
作为“复合”概念?
答案 0 :(得分:3)
<强>约束强>
约束是指定的一系列逻辑运算 模板参数的要求。他们可以出现在 requires-expressions(见下文)并直接作为概念的主体 有9种类型的约束:
- 连词
- 析取
- 谓词约束
- 表达式约束(仅在requires-expression中)
- 类型约束(仅在requires-expression中)
- 隐式转换约束(仅在requires-expression中)
- 参数推导约束(仅在requires-expression中)
- 异常约束(仅在requires-expression中)
- 参数化约束(仅在requires-expression中)
醇>
并且
<强>析取强>
约束P和Q的分离被指定为P || Q. 如果满足任一约束,则满足两个约束的分离。从左到右评估析取和短路(如果满足左约束,则不尝试将模板参数推导到正确的约束中)。用户定义的运算符||重载在约束析取中不允许使用。
答案 1 :(得分:2)
您可以在约束中使用几乎任何常量表达式(包括||
)。唯一的限制是这些表达式必须返回bool
。
||
的一个用途是定义已知共享公共接口的类型集。例如,积分(std::is_integral
)可以定义为许多相同类型约束(is_same<T, int>
)的分离。我不建议这样做。您应该以加法的方式定义概念。