相关疑难解决方法(0)

使用 mem::size_of::<T> 作为数组长度时,在编译时无法知道类型为“T”的值的大小

考虑以下函数:

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。这对我没有任何意义。

为什么会发生这种情况,我该如何解决?

generics rust

6
推荐指数
1
解决办法
1136
查看次数

允许哪些表达式作为[_;中的数组长度N N]?

请考虑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)

arrays traits rust

3
推荐指数
1
解决办法
190
查看次数

标签 统计

rust ×2

arrays ×1

generics ×1

traits ×1