我有一个特征 MyTrait,它的所有实现都可以实现 fmt::Debug。
我有一个包含 Vec<Rc<dyn MyTrait>>
的结构 MyStruct .
如何为 MyStruct 实现 fmt::Debug?
我的第一个想法是手动为 MyStruct 实现 Debug,但考虑到只有 MyTrait 对象的 Debug 的实现可能会有所不同,这似乎是非常错误的。
从逻辑上讲,我应该能够要求 MyTrait“包含”(在 Java 术语中,这将是接口(interface)继承)Debug,然后简单地自动为 MyStruct 派生 Debug。 但我将如何实现这一目标?我没有在文档中找到任何与此相关的内容。
最佳答案
添加 Debug
作为 supertrait 我的特质
:
trait MyTrait: std::fmt::Debug {...}
有些人称这个特性为“trait inheritance”,但在支持类继承的语言中,supertrait 不太像基类。这实际上只是对MyTrait
实现者的约束:“如果你实现MyTrait
,你也必须实现Debug
”由于 dyn MyTrait
是一个实现了 MyTrait
的类型,它也有自己的(自动生成的)Debug
实现,它只是遵从 调试
具体类型。
但是,您不能 upcast a trait object to a supertrait ,至少不是没有一些额外的工作。
关于rust - 如何为 dyn Trait 对象的 Vec 获取 fmt::Debug 的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64298436/