这仅仅是当前的限制还是有技术原因?由于泛型函数被编译为专用代码,我看不出应该阻止它工作的内容.它在该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);    
}
简短回答:它尚未实施,因为很难做到正确.甚至还有一个开放的RFC,名为" 依赖于通用代码中的类型参数的常量 ".
答案很长:
这曾经是导致编译器崩溃的编译器错误.在PR 25091中由@quantheory"修复"了这个错误而不是崩溃.@quantheory评论说
我还没有能够处理相关争端的数组大小或递归问题,尽管我希望我为范围匹配模式所做的更改也可能有助于数组大小.
@quantheory还指出,这将是一个错误,直到RFC 1062的某些内容被合并.对RFC的评论总是受到赞赏,因为他们可能会忘记用例.
| 归档时间: | 
 | 
| 查看次数: | 717 次 | 
| 最近记录: |