编辑注:此代码示例来自 Rust 1.0 之前的版本,不是 Rust 1.0 代码的语法正确。更新后的代码版本会产生不同的错误,但答案仍包含有价值的信息。
我尝试过使用和不使用 Box
,以及使用和不使用生命周期:
trait TraitToImpl {
fn do_something(self, val: i32);
}
struct Cont {
value: i32,
}
impl TraitToImpl for Cont {
fn do_something(self, val: i32) {
println!("{}", val);
}
}
struct StoreTrait<'a> {
field: Box<TraitToImpl + 'a>,
}
fn main() {
let cont = Box::new(Cont { value: 12 }) as Box<TraitToImpl>;
let a = StoreTrait { field: cont };
a.field.do_something(123);
}
我只得到了这个错误信息:
错误:无法转换为Trait对象,因为TraitToImpl特性不是对象安全的。