为什么Rust不允许强制特征容器内的对象?

Jas*_*itz 8 generics traits rust

我有一个Vec<Box<T>>地方T器具Foo.为什么我不能强迫它到Vec<Box<Foo>>即使我可以强迫型的东西Box<T>Box<Foo>?为什么以下代码无法编译?

use std::vec;

trait Foo {}

struct Bar {}

impl Foo for Bar {}

fn main() {
    let v = vec![Box::new(Bar {})];
    let v_1 = v as Vec<Box<Foo>>;
}
Run Code Online (Sandbox Code Playgroud)

DK.*_*DK. 14

因为Box<Bar>大小不同Box<Foo>.强制允许单个值,但在这里你必须调整整个向量的大小.本书在" 特征对象表示 "一节中详细介绍了这一点.短版本:Box<Bar>是指向值的指针. Box<Foo>是指向值的指针指向vtable的指针.