问题描述
我是 Rust 的新手。我的背景是Java。我正在尝试解决以下问题。
- 我有一个为
trait Fuel
和struct Diesel
实现的struct Gas
。 - 我还有一个带有
trait Vehicle
泛型类型参数的Fuel
。 Vehicle 是为struct Car<F: Fuel>
和struct Bus<F: Fuel>
实现的。
最后,我想把对可能的异构特征对象的引用放到一个 Vec
中,如下所示:
let diesel_car = Car { fuel: Diesel {} };
let gas_car = Car { fuel: Gas {} };
let diesel_bus = Bus { fuel: Diesel {} };
let gas_bus = Bus { fuel: Gas {} };
let garage = vec![
&diesel_car,&gas_car,&diesel_bus,&gas_bus
];
但是我得到这个编译错误:
error[E0308]: mismatched types
--> src/main.rs:63:9
|
63 | &gas_car,| ^^^^^^^^ expected struct `Diesel`,found struct `Gas`
|
= note: expected type `&Car<Diesel>`
found reference `&Car<Gas>`
这个 Vec 中引用的泛型类型应该是什么?它猜测它应该类似于 Vec<&dyn Vehicle>
。但是这个变体也不能编译,因为它想提前知道 Vehicle
的泛型类型参数。在 Java 中,我只会写 List<Vehicle<?>
。 Rust 中有没有类似的东西?
整个示例在 playground 中可用。
附言我显然可以从 Vehicle
中删除一个通用参数并将其替换为 Box<dyn Fuel>
,但我想通过动态调度来最小化位置。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)