![](/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.