第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從特征對(duì)象獲取對(duì)具體類型的引用?

如何從特征對(duì)象獲取對(duì)具體類型的引用?

如何從特征對(duì)象獲取對(duì)具體類型的引用?如何獲得Box<B>或&B或&Box<B>從a在此代碼變量:trait A {}struct B;impl A for B {}fn main() {    let mut a: Box<dyn A> = Box::new(B);    let b = a as Box<B>;}此代碼返回錯(cuò)誤:error[E0605]: non-primitive cast: `std::boxed::Box<dyn A>` as `std::boxed::Box<B>` --> src/main.rs:8:13  |8 |     let b = a as Box<B>;  |             ^^^^^^^^^^^  |  = note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait
查看完整描述

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)者


查看完整回答
反對(duì) 回復(fù) 2019-08-02
  • 2 回答
  • 0 關(guān)注
  • 691 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)