能否在where子句中定义const generic?是否有后续支持计划?
关于Rust中在where子句定义常量泛型的问题
目前是否支持?
Rust不支持在where子句中定义常量泛型。常量泛型的声明必须放在函数、结构体或枚举的尖括号<>参数列表里,where子句的作用是为已声明的泛型添加约束,而非声明新的泛型(包括类型泛型和常量泛型)。
你的写法为什么失败?
来看你尝试的两种写法:
- 第一种写法:
fn foo<N>() where const N:usize, {}
错误原因:常量泛型的声明位置错误。const N: usize应该直接放在<>里,而不是where子句中。where子句不能用来声明新的常量泛型参数。
- 第二种写法:
fn foo<const N>() where N:usize {}
错误原因:常量泛型声明时缺少类型标注,正确的声明方式是<const N: usize>,而且where子句里的N: usize属于冗余约束——因为你已经在声明时指定了N的类型是usize,不需要再通过where重复约束。
正确的写法应该是直接在尖括号里声明常量泛型:
fn foo<const N: usize>() { // 函数逻辑 }
未来是否会添加该特性?
截至目前,Rust官方的路线图和已提交的RFC中,没有将常量泛型声明移至where子句的计划。where子句的设计初衷是简化复杂泛型约束的写法,而非作为泛型参数的声明位置。如果有相关需求,可关注Rust GitHub仓库的issue讨论,但短期内这个特性大概率不会被纳入。
内容的提问来源于stack exchange,提问作者CodeDude
相关产品推荐
相关产品推荐

