考虑以下函数:
fn make_array<T>()
where
T: Sized,
{
let bytes = [0u8; std::mem::size_of::<T>()];
}
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,它都无法编译
fn make_array<T>()
where
T: Sized,
{
let bytes = [0u8; std::mem::size_of::<T>()];
}
Run Code Online (Sandbox Code Playgroud)
尽管事实上Sized泛型参数有一个trait bound T。这对我没有任何意义。
为什么会发生这种情况,我该如何解决?
请考虑Rust中的以下最小示例:
const FOOBAR: usize = 3;
trait Foo {
const BAR: usize;
}
struct Fubar();
impl Foo for Fubar {
const BAR: usize = 3;
}
struct Baz<T>(T);
trait Qux {
fn print_bar();
}
impl<T: Foo> Qux for Baz<T> {
fn print_bar() {
println!("bar: {}", T::BAR); // works
println!("{:?}", [T::BAR; 3]); // works
println!("{:?}", [1; FOOBAR]); // works
println!("{:?}", [1; T::BAR]); // this gives an error
}
}
fn main() {
Baz::<Fubar>::print_bar();
}
Run Code Online (Sandbox Code Playgroud)
编译器给出以下错误:
error[E0599]: no associated item named `BAR` …Run Code Online (Sandbox Code Playgroud)