2 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
應(yīng)該很清楚,如果有另一種類型C
實(shí)現(xiàn)A
并且你試圖強(qiáng)制Box<C>
轉(zhuǎn)換為強(qiáng)制轉(zhuǎn)換,則強(qiáng)制轉(zhuǎn)換可能會(huì)失敗Box<B>
。我不知道你的情況,但對(duì)我來說,它看起來很像你將其他語言(如Java)的技術(shù)引入Rust。我從未在Rust中遇到過這種問題 - 也許你的代碼設(shè)計(jì)可以改進(jìn)以避免這種類型的轉(zhuǎn)換。
如果你愿意,你可以“投射”任何東西mem::transmute
??杀氖牵覀儗⒂幸粋€(gè)問題,如果我們只是想投Box<A>
來Box<B>
或&A
于&B
因?yàn)橐粋€(gè)指向trait
是脂肪指針,實(shí)際上包含兩個(gè)指針:一個(gè)實(shí)際的對(duì)象,一到vptr的。如果我們將它轉(zhuǎn)換為struct
類型,我們可以忽略vptr。請(qǐng)記住,這個(gè)解決方案是非常不安全和非常hacky - 我不會(huì)在“真正的”代碼中使用它。
編輯:擰,這比我想象的更不安全。如果你想以這種方式正確地做到這一點(diǎn)你必須使用std::raw::TraitObject
。但這仍然不穩(wěn)定。我不認(rèn)為這對(duì)OP有任何用處; 不要用它!
在這個(gè)非常相似的問題中有更好的選擇:如何匹配特質(zhì)實(shí)現(xiàn)者
添加回答
舉報(bào)