Я понимаю, что вы хотите получить длину массива только из информации о типе.Rust не имеет встроенных типов PI (aka const generics ).Это означает, что универсальные параметры типа , а не (например, целое число для длины массива) в настоящее время не поддерживаются языком.
Существует проблема, отслеживающая этот искорее всего, мы увидим его поддержку в будущем, но не в ближайшем будущем.
Если вам нужно, вы можете обойти это ограничение, применив черту для каждого типа:
trait GetLength {
fn len() -> usize;
}
impl<T> GetLength for [T; 0] {
fn len() -> usize {
0
}
}
impl<T> GetLength for [T; 1] {
fn len() -> usize {
1
}
}
// ...
fn main() {
println!("{}", <[String; 1]>::len());
}
Макросы могут помочь предотвратить повторяющийся набор:
trait GetLength {
fn len() -> usize;
}
macro_rules! impl_get_length {
($v:expr) => {
impl<T> GetLength for [T; $v] {
fn len() -> usize {
$v
}
}
};
}
impl_get_length!{ 0 }
impl_get_length!{ 1 }
// ...
fn main() {
println!("{}", <[String; 1]>::len());
}
Ящики вроде typenum
также помогают обеспечить некоторую поддержку обобщенных констант в существующем языке.