定义概念时是否允许OR(' || ')
Is OR (`||`) allowed when defining concepts?
我看到许多使用&&
定义"组合"概念的例子,但没有一个使用||
。这让我怀疑使用||
是否有意义。在我看来,使用||
将允许指定一个具有类似于重载(即特设多态性)效果的概念,但具有封闭的可能性集。
对于一组"原始"概念C1,…如:
是否合法? C1 || ... || CN
作为"复合"概念?
From cppreference
约束是一个逻辑操作序列,它指定模板参数的要求。它们可以出现在需求表达式(见下文),并直接作为概念的主体这里有9种类型的约束:
- 连词
- 析取
- 谓词限制
- 表达式约束(仅在require -expression中)
- 类型约束(仅在require -表达式中)
- 隐式转换约束(仅在require -表达式中)
- 参数演绎约束(仅在require -表达式中)
- 异常约束(仅在require -表达式中)
- 参数化约束(仅在require -表达式中)
和
析取
约束p和Q的析取被指定为p || Q。如果任何一个约束满足,则满足两个约束的析取。从左到右计算析取并短路(如果满足左约束,则不会尝试将模板参数演绎到右约束中)。在约束析取中不允许用户定义运算符||的重载。
您可以在约束中使用几乎任何常量表达式(包括||
)。唯一的限制是这些表达式必须返回bool
。
||
的一个用途是定义一组已知共享一个公共接口的类型。例如,积分(std::is_integral
)可以定义为若干同类型约束(is_same<T, int>
)的析取。但我不建议这样做。您应该以一种附加的方式定义概念。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 放置/分段语法是否可能出现懒惰"operator or"重载?
- C++检查十六进制是否由 ABCDEF1 OR 0 组成
- 如何检查给定路径是否指向现有文件 OR 目录
- 在执行其中的代码之前,是否处理了 if 中的所有逻辑 OR 分隔检查?
- 逻辑 OR 和逗号运算符是否等效?
- 我是否正确地将枚举值与C++的"or"运算符进行比较?
- 定义概念时是否允许OR(' || ')
- 在or条件语句中是否存在强制对两个表达式求值的模式或技巧?
- gcc 或其他编译器在条件表达式中使用时是否会自动将按位 or 转换为布尔值 or?