中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

免費(fèi)做外貿(mào)的網(wǎng)站免費(fèi)推廣的平臺

免費(fèi)做外貿(mào)的網(wǎng)站,免費(fèi)推廣的平臺,中山網(wǎng)站建設(shè)的公司,騰訊云做網(wǎng)站步驟Rust的運(yùn)行時多態(tài) Rust的靜態(tài)多態(tài)即編譯時多態(tài),通過**泛型特征約束(Generic Type Trait Constrait)**來實(shí)現(xiàn); 那么動態(tài)多態(tài)(運(yùn)行時多態(tài))呢?答案是特征對象(Trait Object&#xff…

Rust的運(yùn)行時多態(tài)

Rust的靜態(tài)多態(tài)即編譯時多態(tài),通過**泛型+特征約束(Generic Type + Trait Constrait)**來實(shí)現(xiàn);

那么動態(tài)多態(tài)(運(yùn)行時多態(tài))呢?答案是特征對象(Trait Object)。

特征對象不是一個實(shí)例,而是一個結(jié)構(gòu)體類型。

語法是dyn TraitName,編譯時指示某個對象是實(shí)現(xiàn)TraitName的類型,其具體類型未知。

分析

程序運(yùn)行時,要調(diào)用一個特征方法,需要兩個要素:

  • 對象實(shí)例(對象類型未知,因此其編譯期大小未知)
  • 特征的方法表

所以特征對象結(jié)構(gòu)體必須獲知以上兩個要素。

發(fā)生運(yùn)行時多態(tài)時,在編譯階段編譯器無法辨別對象實(shí)例的類型,因此對象實(shí)例要素的大小無法獲知,進(jìn)而特征對象(Trait Object)的大小在編譯階段無法被確定,這決定了Trait Object只能存放在堆上,通過引用或智能指針來訪問。

指向特征對象的引用或智能指針,包含了兩個指針成員,在程序運(yùn)行時,ptr1在指向?qū)ο髮?shí)例,ptr2指向該對象類型的Trait Method實(shí)現(xiàn)。

典型用例


#[derive(Debug)]
struct Journal {author: String,year: u16,from: String,
}
#[derive(Debug)]
struct Conference {author: String,year: u16,country: String,
}trait Summary {fn summary(&self) -> String;
}impl std::fmt::Debug for dyn Summary {fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {write!(f, "{}", self.summary())}
}impl Summary for Journal {fn summary(&self) -> String {format!("{}\t{}\t{}", self.author, self.year, self.from)}
}
impl Summary for Conference {fn summary(&self) -> String {format!("{}\t{}\t{}", self.author, self.year, self.country)}
}// can't defer concrete type in compile stage, trait constrain can't used here
// fn init_default(_type: &str) -> impl Summary {
//     if _type == "journal" {
//         Journal {
//             author: "hjd".to_owned(),
//             year: 2018,
//             from: "Nature".to_owned(),
//         }
//     } else {
//         Conference {
//             author: "hjd".to_owned(),
//             year: 2018,
//             country: "China".to_owned(),
//         }
//     }
// }// 只能使用特征對象進(jìn)行動態(tài)分發(fā),因?yàn)榉祷仡愋途幾g期無法推理獲知
fn init_default(_type: &str) -> Box<dyn Summary> {if _type == "journal" {Box::new(Journal {author: "hjd".to_owned(),year: 2018,from: "Nature".to_owned(),})} else {Box::new(Conference {author: "hjd".to_owned(),year: 2018,country: "China".to_owned(),})}
}fn main() {let p1 = init_default("journal");let p2 = init_default("conference");let p3 = init_default("journal");let p4 = init_default("conference");let p_list = vec![p1, p2, p3, p4];// dyn Summary是一個特征對象類型,它忘記了自己之前的具體類型,只能調(diào)用Summary特征中的方法for p in p_list.iter() {println!("{:?}", p);}
}
http://m.risenshineclean.com/news/60545.html

相關(guān)文章:

  • 網(wǎng)站優(yōu)化公司哪個好推廣app
  • 如何建設(shè)購物網(wǎng)站seo外包顧問
  • 企業(yè)文化手冊信息流優(yōu)化師是什么
  • 建設(shè)京東類的網(wǎng)站需要什么流程營銷渠道名詞解釋
  • 網(wǎng)站建設(shè)項(xiàng)目介紹查收錄網(wǎng)站
  • 長沙做網(wǎng)站價格網(wǎng)絡(luò)運(yùn)營是什么意思
  • 手機(jī)網(wǎng)站欣賞谷歌怎么投放廣告
  • 東莞網(wǎng)站建設(shè)方案表怎么做市場營銷和推廣
  • 網(wǎng)頁設(shè)計(jì)與制作實(shí)例教程方其桂seo教程網(wǎng)站優(yōu)化
  • 建設(shè)假網(wǎng)站2345瀏覽器網(wǎng)頁版
  • 義烏 網(wǎng)站制作百度注冊公司網(wǎng)站
  • 網(wǎng)站建設(shè)基礎(chǔ)教程如何做線上推廣
  • 純凈水企業(yè)怎樣做網(wǎng)站競價外包
  • 建設(shè)網(wǎng)站需要哪些內(nèi)容福州整站優(yōu)化
  • thinkphp做的上線網(wǎng)站電商培訓(xùn)機(jī)構(gòu)
  • 犀牛云 做網(wǎng)站優(yōu)化關(guān)鍵詞排名優(yōu)化公司
  • 長安營銷型網(wǎng)站建設(shè)seo優(yōu)化范疇
  • 注冊一個網(wǎng)站流程關(guān)鍵詞推廣優(yōu)化外包
  • 沈陽高端網(wǎng)站定制百度知道問答平臺
  • 網(wǎng)站上的地圖怎么做小程序開發(fā)教程全集免費(fèi)
  • 做網(wǎng)站是互聯(lián)網(wǎng)開發(fā)嗎網(wǎng)站權(quán)重怎么看
  • 網(wǎng)站怎么寫容易獲得關(guān)鍵詞排名杭州seo代理公司
  • 網(wǎng)站為什么做等保網(wǎng)站優(yōu)化塔山雙喜
  • java 網(wǎng)站開發(fā)實(shí)例教程網(wǎng)絡(luò)推廣的基本渠道
  • 濟(jì)南微網(wǎng)站互聯(lián)網(wǎng)營銷師證書
  • 購物網(wǎng)站怎么做代碼網(wǎng)站排名工具
  • 企業(yè)起名字大全最新版處理事件seo軟件
  • 廬江網(wǎng)站建設(shè)百度的總部在哪里
  • 彩票源碼論壇專業(yè)seo站長工具
  • 移動版網(wǎng)站開發(fā)電商網(wǎng)站平臺搭建