![](/img/trans.png)
[英]How to move a Vec<Box<dyn Trait>> Into Vec<Rc<RefCell<dyn Trait>>>
[英]How to get an implementation of fmt::Debug for a Vec of dyn Trait objects?
我有一个特征 MyTrait,其中所有实现都可以实现 fmt::Debug。 我有一个包含Vec<Rc<dyn MyTrait>>
的结构 MyStruct 。 如何为 MyStruct 实现 fmt::Debug?
我的第一个想法是手动为 MyStruct 实现 Debug 但这似乎是非常错误的,因为只有 MyTrait 对象的 Debug 实现可能会有所不同。
从逻辑上讲,我应该能够要求 MyTrait “包含”(在 Java 术语中,这将是接口继承)Debug,然后简单地自动为 MyStruct 派生 Debug。 但我将如何实现这一目标? 我在文档中没有发现任何与此相关的内容。
将Debug
添加为MyTrait的MyTrait
:
trait MyTrait: std::fmt::Debug {...}
有些人称这个特性为“trait 继承”,但在支持类继承的语言中,supertrait 并不像基类。 这实际上只是对MyTrait
实现者的一个限制:“如果你实现了MyTrait
,你也必须实现Debug
。” 由于dyn MyTrait
是一种实现了MyTrait
的类型,它也有自己的(自动生成的) Debug
实现,它只是遵从具体类型的Debug
。
但是,您不能将 trait 对象向上转换为 supertrait ,至少在没有一些额外工作的情况下不能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.