繁体   English   中英

如何为 dyn Trait 对象的 Vec 获取 fmt::Debug 的实现?

[英]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添加为MyTraitMyTrait

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM