我正在创建一个HashMap<u64, Box<dyn MyTrait>>. 我可以创建HashMap并插入一个实现 的结构MyTrait,但是当我检索MyTrait并尝试使用它时,编译器向我抱怨:
error[E0161]: cannot move a value of type dyn MyTrait: the size of dyn MyTrait cannot be statically determined
Run Code Online (Sandbox Code Playgroud)
我的印象是,一个特征由两个指针组成,一个指向 vtable,一个指向对象数据。所以任何特征的大小,包括MyTrait,都应该是2 * pointer_size。此外,对象数据指针指向MyStruct大小已知的 a 。显然我的理解是错误的,但我不明白为什么。
这是我的代码:
use std::collections::HashMap;
fn main() {
let mut hm: HashMap<u64, Box<dyn MyTrait>> = HashMap::new();
hm.insert(0, Box::new(MyStruct{num: 0}));
match hm.get(&(0 as u64)) {
Some(r) => {
r.my_fun();
}
None => { println!("not found");}
}
}
pub trait MyTrait …Run Code Online (Sandbox Code Playgroud) rust ×1