【发布时间】:2020-08-24 04:58:00
【问题描述】:
我有一个库需要一些东西来实现特定的特征 (TQDispatch)。
在我的主要项目中,我有一个对象向量,它们都实现了动态调度所需的不同特征 (Device)。
设备特征已声明
pub trait Device: TQDispatch{..}
我的期望是我可以从Device 实现者列表中获取一个项目并获取它的TQDispatch-ness,以便我可以将它传递给库。鉴于任何实现 Device 的东西也实现了 TQDispatch,这似乎应该是可能的。
我可以将原始的“真实”对象投射到任何一个,但我找不到如何在这两个特征之间进行投射。
澄清:这些是我的项目向量中的Arc<dyn Device>,我需要它们为库的Arc<dyn TQDispatch>。
【问题讨论】:
-
或许可以看看this
-
The top answer to the other question applied here。使用specialization,您可以在夜间做得更好。 built-in supertrait coercions 未来会实现也不是不可能,但我个人不会为此屏住呼吸。
-
@trentcl 你能和
min_specialization一起工作吗?完整的specialization功能不太可能很快稳定。 -
@PeterHall 嗯...我不太明白
min_specialization。就此而言,我也不太了解specialization——我认为default是必需的,但我想不是吗? Removingdefaultand changing the feature name seems to work,但仅当向上转换方法是 trait 中唯一的东西时(这可能使它不是很有用)。
标签: rust traits dynamic-dispatch trait-objects