小编rob*_*udd的帖子

dyn MyTrait 的大小无法在采用 self 的方法中静态确定?

我正在创建一个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

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

标签 统计

rust ×1