< 返回版块

lsk569937453 发表于 2023-10-18 09:15

https://gist.github.com/lsk569937453/10a4bd6e1efa286c2d99959b8c296e47

A和B都有相同的base_obj,并且都实现了get_route,我现在想要修改Vec<Box>里面的base_obj,是不是只能实现get_base_obj接口?

评论区

写评论
作者 lsk569937453 2023-10-19 11:10

感谢感谢!

苦瓜小仔 2023-10-18 10:27

dyn RouteTrait 只是一种修改 BaseObj 的方式,以动态分发的方式(通常伴随 Box 之类的堆分配)。


类型集合固定的话,可以用静态分发(通常无需堆分配)的方式修改,比如

  1. 定义一个 enum + 匹配分支
  2. 泛型类型参数 + 具体实现

比如第一种方式 https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=0cfee54a845ed54663135e4a95dc3dfb

第一种方式已经是一种普遍的模式了:https://quinedot.github.io/rust-learning/dyn-trait-vs.html#enums

1 共 2 条评论, 1 页