与下面的无效代码等效的道德是什么?
// Suppose you want to check, as part of a concept,
// if some operation on a type results in a type that models such concept.
// you cannot constrain the resulting type with the same concept
// in the same way you can't have self referential types
// (that would result in recursive definitions)
template<class T>
concept Int = requires(const T& a, const T& b) {
{ a + b } -> Int; // compiler don't know what to do
};
假设作为概念的一部分,您要检查对某个类型的某些操作是否导致对该概念进行建模的类型。
那是无限的递归。像任何函数递归一样,您必须具有终止条件。定义模板参数终止条件的通常方法是通过专门化。但是concept
s不能明确地专门化,因此不能有任何终止条件。
从逻辑上讲,它也是不连贯的,因为您试图使用要定义的东西来编写定义。定义上没有意义的东西没有“道德等同物”。
您的概念似乎是在说:“T
将是我可以添加到另一个东西T
并产生……的东西”吗?您是否希望它能够产生一些不相关的类型U
,并且可以将其添加到另一个类型中U
来产生...又一次呢?即使忽略了这个问题,也应该U
可以添加到T
?如果是这样,那应该产生什么?
在编写概念时,请从用例开始,首先要确定要执行的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句