1

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

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

声明了设备特征

pub trait Device: TQDispatch{..}

我的期望是我可以从实现者列表中获取一个项目Device并获得它的TQDispatch特性,以便我可以将它传递给库。鉴于任何实现的东西Device也都实现了TQDispatch,这似乎应该是可能的。

我可以将原始的“真实”对象投射到任何一个,但我找不到如何在这两个特征之间进行投射。

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

4

1 回答 1

1

我可以将原始的“真实”对象投射到任何一个,但我找不到如何在这两个特征之间进行投射。

您需要在“子特征”中实现显式转换。

Rust 不是基于继承的语言,所以

pub trait Device: TQDispatch{..}

表示“设备需要TQDispatch”,而不是“设备扩展TQDispatch”。

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

于 2020-08-24T07:13:28.970 回答