gpt4 book ai didi

rust - 如何将 `Arc` 转换为 `Arc` ?

转载 作者:行者123 更新时间:2023-12-03 11:37:03 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





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 Devicedyn TQDispatch完全是不同的值(value)观。

关于rust - 如何将 `Arc<dyn SubTrait>` 转换为 `Arc<dyn SuperTrait >` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63554958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com