我无法理解以下错误:
// test.rs
struct A {
a: u32
}
trait B { }
impl B for A { }
struct C {
c: Vec<Box<dyn B>>,
}
fn test() {
let a = A {a: 1};
let a_vec = vec![Box::new(a)];
let c = C {
c: a_vec,
// c: vec![Box::new(a)],
};
}
编译错误:
mismatched types
expected trait object `dyn test::B`, found struct `test::A`
错误发生在我尝试创建 C 的那一行。有趣的是,如果我按照以下方式创建 C,那么它可以正常编译。
let c = C {
c: vec![Box::new(a)],
};
另一种可行的方法是
let a_vec: Vec<Box<dyn B>> = vec![Box::new(a)];
let c = C {
c: a_vec,
};
我做的另一个实验是将 Cc 的类型更改为 Box 而不是 Vec<Box>,然后无论我如何启动它都会编译。
在我看来,这可能是 Rust 关于特征对象向量的类型推断的一些缺失功能/错误?我对 Rust 还是很陌生,所以对此的任何想法都非常感谢!