[T; N]中的N并不是范型,所以我们无法写出如下的代码:struct Foo<N> {
data: [i32; N]
}
ArrayLength<T>和结构体GenericArray<T, N: ArrayLength<T>>,这样我们就可以写出刚才我们想要的等价结构体了:struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
typenum库(一个范型的数值系统)中的无符号数,ArrayLength<T>有默认的实现,因此如果我们可以这样定义一个长度为5的数组use generic_array::typenum::U5;
struct Foo<N: ArrayLength<i32>> {
data: GenericArray<i32, N>
}
fn main() {
let foo = Foo::<U5>{data: GenericArray::default()};
}
GenericArray<T, U5>基本上就和[T; 5]差不多use generic_array::typenum::U5;
struct Foo<T, N: ArrayLength<T>> {
data: GenericArray<T, N>
}
fn main() {
let foo = Foo::<i32, U5>{data: GenericArray::default()};
}
generic-array的源代码跟一下这个事情~祝大家元旦快乐~原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。