为什么关联常量不依赖于类型参数?

费里奥

这仅仅是当前限制还是有技术原因?当泛型函数被编译为专用代码时,我看不出有什么应阻止它起作用。它在main功能上也很好用

示例(操场):

#![feature(associated_consts)]
trait HasNumber<T> {
    const Number: usize;
}

enum One {}
enum Two {}

enum Foo {}

impl<T> HasNumber<One> for T {
    const Number: usize = 1;
}

impl<T> HasNumber<Two> for T {
    const Number: usize = 2;
}

fn use_number<T, H: HasNumber<T>>() {
    let a: [u8; H::Number] = unsafe { ::std::mem::uninitialized() };
}

fn main() {
    let a: [u8; <Foo as HasNumber<One>>::Number] = unsafe { ::std::mem::uninitialized() };
    println!("{}", <Foo as HasNumber<One>>::Number); 
    println!("{}", <Foo as HasNumber<Two>>::Number);    
}
oli_obk

简短的回答:由于难以正确处理,因此尚未实施。甚至还有一个开放的RFC,名为“依赖于通用代码中类型参数的常量”。

长答案:

这曾经是导致编译器崩溃的编译器错误它由PR 25091中的@quantheory“修复”,是将其变为错误而不是崩溃。@quantheory评论说

我尚未能够为关联的const处理数组大小或递归问题,尽管我希望我对范围匹配模式所做的更改也可能有助于数组大小。

@quantheory还指出,除非合并RFC 1062中的某些内容,否则这将是一个错误人们总是赞赏对RFC的评论,因为它们可能会提示被遗忘的用例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

添加类型信息而不依赖于键入模块

为什么`std:variant` 的`operator=(T&& t)` 的noexcept 规范不依赖于内部类型的析构函数的noexcept 规范?

Maven构建不依赖于出口库的包装类型罐子

Maven:如何不依赖于父POM

通用接口,不依赖于特定逻辑

形状不依赖于工作表吗?

Dagger:为什么 dagger 需要一个不依赖于另一个对象的对象的 @inject 构造函数

Gentoo软件包维护者为什么要无条件安装systemd单元文件(即不依赖于'systemd'USE标志)?

不依赖于所有(仅按值调用)参数的返回值的有用性

为什么不依赖输入?

如何不依赖于Java中的键值而从树形图顺序获取输出

动态读取exel文件,而不依赖于行,并写入json c#

如何设置一个OnClickListener上不依赖于位置的recyclerview

Symfony / Doctrine:实体“模式”注释不依赖于环境吗?

模块不依赖于Intellij IDEA 2017.2.5 Java 9

在 Ubuntu 20.04 上启用矩阵工作区,而不依赖于“不受信任”的代码或扩展

通过套接字发送数据而不依赖于接收数据

如何制作不依赖于msvc dll的Win32应用程序?

复杂联接的计数不依赖于所有表

使我的GRUB不依赖于我的外部磁盘

构造批处理而不依赖于WriteBatch类的单个实例

Grails不依赖于语言环境的十进制数据绑定

如何捆绑不依赖于发布npm包的模块

Android:从给定时间计算天数而不依赖于操作系统时间

您似乎不依赖于“ @ angular / core”。这是一个错误

您似乎不依赖于“ @ angular / core和/或” rxjs“。这是一个错误

固定的 excel 公式(不依赖于移动单元格)

用不依赖于匹配值的单个分支重写匹配

如何不依赖于服务器特定的选项而阻止大范围的IP?