簡體   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