最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

理解 C++ 類型擦除

2023-08-30 11:01 作者:BYYYSJX  | 我要投稿

類型擦除(Type Erasure)顧名思義就是把類型信息擦除,這種代碼可以處理來自多個類或模板的對象,而不需要知道即將對其操作的對象的類型是什么。類型擦除主要用于泛型編程,可以編寫出能接受任意類型參數(shù)的函數(shù)和類,只要它們提供了你需要的操作,這意味著只需要關(guān)心它的行為即可,而不用在意其具體實現(xiàn)。


  • void:適用于C風(fēng)格的API設(shè)計和處理一些低級操作,如直接內(nèi)存操作等等。但在現(xiàn)代C++編程中盡量避免使用void,因為它并不安全,不能提供類型檢查。

  • 虛函數(shù):虛函數(shù)主要用于實現(xiàn)“運行時多態(tài)”,即在運行時選擇調(diào)用哪個類的哪個函數(shù)。適用于需要在運行時改變行為,或者處理由多種不同類型對象組成的集合的場景。并且虛函數(shù)的實現(xiàn)十分的簡單易懂(效率也不見得差特別多)。

  • std::variant:適合在有限的、確定的類型集合中進行類型擦除。比如作為函數(shù)返回值,需要返回不同類型值的場景,或者需要存儲有限種類型的容器等。

  • CRTP:適用于在編譯時需要確定類型,且需要提供高性能的場景。比如當(dāng)你需要為多個類型提供相同的接口,但又不想付出虛函數(shù)的開銷時可以使用,但是需要注意是否類層次結(jié)構(gòu)是否比較復(fù)雜,那么使用CRTP會比較繁瑣。

  • Concept-based Polymorphism:適用于需要提供強類型檢查,且接口適用于多個類型的場景。Concepts提供了更好理解的代碼表達形式和編譯時的錯誤檢查和信息,適合實現(xiàn)泛型編程和模板庫。

這就是C++實現(xiàn)一個特性的過程中有著茫茫多的實現(xiàn)方案,在類型擦除的實現(xiàn)這個足足提供了五種方案,給選擇困難癥來了很大的痛苦,雖然條條大路通羅馬,但是你不能保證你繞了多少路啊。得清楚每種方案的優(yōu)劣才可以最終下判斷,這就是C++的折磨之處。五種方案中第一個void*不提倡使用,但是后面四種都是有在使用的,并且除了虛函數(shù)其他三種都可以在編譯期完成,性能上是更優(yōu)的。

WRITE-BUG研發(fā)團隊衷心希望【W(wǎng)RITE-BUG數(shù)字空間】可以給每位同學(xué)一個屬于自己的秘密空間,同時祝愿大家在“公開圈子”世界里,遇見志同道合的伙伴們,因為我們與大家一樣,都曾孤獨前行著。


理解 C++ 類型擦除的評論 (共 條)

分享到微博請遵守國家法律
遂川县| 昭通市| 公主岭市| 长海县| 青铜峡市| 定州市| 白城市| 贡嘎县| 大埔区| 鄯善县| 托克逊县| 景泰县| 金川县| 永昌县| 松阳县| 肥城市| 遂宁市| 织金县| 郯城县| 寿宁县| 梧州市| 甘孜县| 衡山县| 元朗区| 顺义区| 哈密市| 嘉鱼县| 加查县| 垦利县| 巴中市| 于田县| 永州市| 黔东| 长春市| 徐水县| 辽阳市| 合川市| 昌乐县| 铁力市| 临颍县| 满城县|