IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Box doesn\'t implement the trait

    金庆发表于 2021-12-21 07:09:00
    love 0

     From: Don't use boxed trait objects (bennetthardwick.com)

    By default a Box<dyn Trait> doesn't implement the trait of the object it contains. This means that trying to construct PeopleZoo<Box<dyn Person>> won't work out of the box and will give a type error.

    Because of this, it's good practice to give a default implementation of your trait for it's boxed counterpart. This can be done by calling as_ref or as_mut on the Box and calling the references relevant method.

    For just a small bit of effort you can help a bunch of people that may consume your struct.

    trait Person { fn say_hello(&self); } impl Person for Box<dyn Person> { fn say_hello(&self) { self.as_ref().say_hello() } }

     

    struct PeopleZoo<P: Person> {
        people: Vec<P>,
    }
    fn main() { let mut zoo: PeopleZoo<Box<dyn Person>> = PeopleZoo { people: vec![] }; }


    金庆 2021-12-21 15:09 发表评论


沪ICP备19023445号-2号
友情链接