如何解决如何将Arc <dyn SubTrait>转换为Arc <dyn SuperTrait>?
我有一个需要一些东西来实现特定特征(TQdispatch
)的库。
在我的主项目中,我有一个对象向量,这些对象都实现了动态分配所需的不同特征(Device
)。
设备特征已声明
pub trait Device: TQdispatch{..}
我的期望是,我可以从Device
实现者的列表中取出一个项目,并以其TQdispatch
的身份进行访问,以便将其传递给库。假设实现Device
的任何事物也实现TQdispatch
,这似乎应该是可能的。
我可以将原始的“真实”对象转换为任意一个,但是我找不到如何在两个特征之间进行转换。
说明:这些在我的项目向量中为Arc<dyn Device>
,对于库我需要它们为Arc<dyn TQdispatch>
。
解决方法
我可以将原始的“真实”对象转换为任意一个,但是我找不到如何在这两个特征之间进行转换。
您需要在“子特性”中实现显式转换。
Rust不是基于继承的语言,所以
pub trait Device: TQDispatch{..}
表示“设备需要 TQDispatch”,而不是“设备扩展 TQDispatch”。
如果您想要Arc
输出,则还需要为此创建一个全新的Arc,因为dyn Device
和dyn TQDispatch
完全是不同的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。