假设我有一个类模板,Angle
SFINAE方法:
template <typename T,
std::enable_if_t<std::is_floating_point_v<T>, bool> = true>
struct Angle { T m_radians; };
C20给了我们一些概念:
template <std::floating_point T>
struct Angle { T m_radians; };
或者,我可以用
static_assert
约束类型:
template <typename T>
struct Angle {
static_assert(std::is_floating_point_v<T>,
"Angle<T> works only with floating point types.");
T m_radians;
};
问题:我是否可以对带有概念/
要求的
的模板参数设置约束,而这些约束是我无法使用的
[我不是在征求关于哪种技术更好的意见。而且,我知道像
enable\u if
这样的概念可以利用SFINAE在解析过程中消除重载和专门化,而这是使用static\u assert
无法做到的。我的问题完全是关于约束的。]
它们都能够对传入的类型进行图灵完全计算并接受任意子集,并且可以访问关于每个类型的相同信息。
没有一个更强大或更弱。
我有一系列复杂的类型级别函数,它们的计算结果如下: 显然,在这种情况下,这个表达式是一个。更一般地说,我们可以说: 有没有办法教GHC推断这一点? 编辑:@chi指出,在某些情况下,GADT可以解决这一问题,但我的特殊情况是: 然后 不能被访问,但是也许GHC应该能够推断出
我正在尝试创建自己的复合验证注释来验证字符串——到目前为止,它由注释@NotNull、@NotBlank和@Size组成 但是,我不想让它们保持默认值,而是希望能够传入一个参数值,例如,如果我执行@ValidString(min=1,max=50),那么@Size注释可以读取这些值——这可能吗? 我的约束-
现在还有另一种可能的使用方法,我不太明白 这个函数可以很容易地接受任何可转换为a的类型。这很奇怪,因为第一个模板参数(“from”)基本上被删除,并在函数调用时推导出来。下面的函数也可以工作,我很肯定它实际上与前面的函数等效 同样,的类型是在调用时推导出来的。
本文向大家介绍TypeScript 类型参数作为约束,包括了TypeScript 类型参数作为约束的使用技巧和注意事项,需要的朋友参考一下 示例 使用TypeScript 1.8,类型参数约束可以从同一类型参数列表中引用类型参数。以前这是一个错误。
这在gcc中编译,但在clang和最新的MSVC预览编译器中都不编译 下一个尝试是使用friend声明中的约束,即。 这看起来像是一种自然的方式,因为无论如何只能在满足约束的情况下实例化friend。