【问题标题】:How to convert an `Arc<dyn SubTrait>` into an `Arc<dyn SuperTrait >`? [duplicate]如何将 `Arc<dyn SubTrait>` 转换为 `Arc<dyn SuperTrait>`? [复制]
【发布时间】:2020-08-24 04:58:00
【问题描述】:

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

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

设备特征已声明

pub trait Device: TQDispatch{..}

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

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

澄清:这些是我的项目向量中的Arc&lt;dyn Device&gt;,我需要它们为库的Arc&lt;dyn TQDispatch&gt;

【问题讨论】:

标签: rust traits dynamic-dispatch trait-objects


【解决方案1】:

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

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

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

pub trait Device: TQDispatch{..}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 2020-03-26
    • 2023-03-29
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多