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

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

是否允許多態(tài)變量?

是否允許多態(tài)變量?

Git
慕慕森 2019-10-21 15:44:45
我有各種結(jié)構(gòu)都實(shí)現(xiàn)相同的特征。我想在某種條件下分支,在運(yùn)行時(shí)確定要實(shí)例化哪些結(jié)構(gòu)。然后,無論我跟隨哪個(gè)分支,我都希望從該特征調(diào)用方法。在Rust中這可能嗎?我希望實(shí)現(xiàn)類似以下的內(nèi)容(無法編譯):trait Barks {    fn bark(&self);}struct Dog;impl Barks for Dog {    fn bark(&self) {        println!("Yip.");    }}struct Wolf;impl Barks for Wolf {    fn bark(&self) {        println!("WOOF!");    }}fn main() {    let animal: Barks;    if 1 == 2 {        animal = Dog;    } else {        animal = Wolf;    }    animal.bark();}
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

DK有一個(gè)很好的解釋,我將舉一個(gè)例子,在該例子中我們?cè)诙褩I戏峙銬ogor Wolf,避免堆分配:


fn main() {

    let dog;

    let wolf;

    let animal: &Barks;

    if 1 == 2 {

        dog = Dog;

        animal = &dog;

    } else {

        wolf = Wolf;

        animal = &wolf;

    }

    animal.bark();

}

這有點(diǎn)丑陋,但是引用實(shí)現(xiàn)的間接尋址與相同,而Box開銷卻很少。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

定義自定義枚舉是最有效的方法。這將允許您在堆棧上精確分配所需的空間量,即最大選項(xiàng)的大小,再加上1個(gè)額外的字節(jié)以跟蹤存儲(chǔ)哪個(gè)選項(xiàng)。與使用a Box或trait引用的解決方案不同,它還允許直接訪問而無需間接級(jí)別。


不幸的是,它確實(shí)需要更多樣板:


enum WolfOrDog {

    IsDog(Dog),

    IsWolf(Wolf)

}

use WolfOrDog::*;


impl Barks for WolfOrDog {

    fn bark(&self) {

        match *self {

            IsDog(ref d) => d.bark(),

            IsWolf(ref w) => w.bark()

        }

    }

}


fn main() {

    let animal: WolfOrDog;

    if 1 == 2 {

        animal = IsDog(Dog);

    } else {

        animal = IsWolf(Wolf);

    }

    animal.bark();

}

在這里,main我們只使用一個(gè)堆棧分配的變量,其中包含我們自定義枚舉的一個(gè)實(shí)例。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 602 瀏覽

添加回答

舉報(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)