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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

Git
慕慕森 2019-10-21 15:44:45
我有各種結(jié)構(gòu)都實現(xiàn)相同的特征。我想在某種條件下分支,在運行時確定要實例化哪些結(jié)構(gòu)。然后,無論我跟隨哪個分支,我都希望從該特征調(diào)用方法。在Rust中這可能嗎?我希望實現(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貢獻1809條經(jīng)驗 獲得超8個贊

DK有一個很好的解釋,我將舉一個例子,在該例子中我們在堆棧上分配Dogor Wolf,避免堆分配:


fn main() {

    let dog;

    let wolf;

    let animal: &Barks;

    if 1 == 2 {

        dog = Dog;

        animal = &dog;

    } else {

        wolf = Wolf;

        animal = &wolf;

    }

    animal.bark();

}

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


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

TA貢獻1995條經(jīng)驗 獲得超2個贊

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


不幸的是,它確實需要更多樣板:


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我們只使用一個堆棧分配的變量,其中包含我們自定義枚舉的一個實例。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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