如何将"Arc<dyn SubTrait>"转换为"Arc<dyn SuperTrait >"?



我有一个库,它需要一些东西来实现特定的特性(TQDispatch(。

在我的主要项目中,我有一个对象向量,它们都实现了动态调度所需的不同特性(Device(。

设备特征被声明为

pub trait Device: TQDispatch{..}

我的期望是,我可以从Device实现者列表中获取一个项,并达到其TQDispatch的状态,以便将其传递给库。假设任何实现Device的东西也实现TQDispatch,这似乎是可能的。

我可以将原始的"真实"对象转换为任意一个,但我找不到如何在这两个特征之间转换。

澄清:这些是我的项目向量中的Arc<dyn Device>,我需要它们是库的Arc<dyn TQDispatch>

我可以将原始的"real"对象强制转换为任意一个,但我找不到如何在这两个特征之间进行强制转换。

您需要在";亚性状";。

Rust不是一种基于继承的语言,因此

pub trait Device: TQDispatch{..}

是指";设备需要TQDispatch";,而不是";设备扩展TQDispatch";。

如果想要Arc输出,还需要为此创建一个全新的Arc,因为dyn Devicedyn TQDispatch的值完全不同。

最新更新