这个问题在这里已经有了答案:
Why doesn't Rust support trait object upcasting?
(4 个回答)
1年前关闭。
我有一个库需要实现特定特征( TQDispatch
)。
在我的主要项目中,我有一个对象向量,它们都实现了动态调度所需的不同特征( Device
)。
声明了设备特征
pub trait Device: TQDispatch{..}
我的期望是我可以从 Device
的列表中取出一个项目。实现者并获取其TQDispatch
-ness,以便我可以将其传递给图书馆。鉴于任何实现 Device
还实现了TQDispatch
,这似乎应该是可能的。我可以将原始的“真实”对象转换到任何一个,但我找不到如何在这两个特征之间进行转换。
澄清:这些是
Arc<dyn Device>
在我的项目向量中,我需要它们是 Arc<dyn TQDispatch>
为图书馆。
最佳答案
I can cast the original 'real' object to either, but I cannot find how to cast between the 2 traits.
您需要在“子特征”中实现显式转换。
Rust 不是基于继承的语言,所以
pub trait Device: TQDispatch{..}
表示“设备需要 TQDispatch”,而不是“设备扩展 TQDispatch”。如果您想要
Arc
输出,您还需要为此创建一个全新的 Arc,因为 dyn Device
和 dyn TQDispatch
完全是不同的值(value)观。
关于rust - 如何将 `Arc<dyn SubTrait>` 转换为 `Arc<dyn SuperTrait >` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63554958/