类variant解剖
生活随笔
收集整理的這篇文章主要介紹了
类variant解剖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明:由于代碼較為龐大,類variant源碼請參考\eos\libraries\fc\src中的variant.hpp與variant.cpp文件^_^. 首先概覽一下這個龐大的類,細數一下,包含24個構造函數,囊括了24個構造函數,復制構造函數,十幾個有效值的判斷,十來個的get函數,各種運算符的重載,右值引用,等等,類的內部還設計了一個訪問者類,類外部再有對variant的重封裝、定義,只為打造一個萬能容器,能夠存儲任何類型的數據,下面來看看它是如何實現與工作的。 1.支持類型的定義: 從構造類型來看,從1,2,4,8各種字節的有符號和無符號類型、寬字節、符點型、bool類型、各種指針、string,拿一個實現的看看: this指針強轉后賦值,那我們看看variant的成員變量: 基本類型不會超過16個字節,是安全的,沒有問題,后面還有一個操作,用來將來判斷類型,如果資源需要釋放,這里就起作用了: 注意set_variant_type不是variant的成員函數,把數據類型的賦給了最后一個字節(這里說法不嚴格,自行理解…),此類的第一個走位。 基本類型OK了,那么擴展類型呢,成員的內存不夠用,只能用new了,如下: 有一點,寬字節的字符串也轉換成單節字字符串了再存儲。有內存的分配就有釋放: 注意指針的強轉,一定要保證自定義類型內存的正確釋放和析構函數的調用。再看看數據的獲取: 這里代碼很明顯,對于帶有數組類型性質的自定義類型,是支持下標操作的。還有一些帶AS操作的類型轉換函數: 還有很多其它在fc命名空間下的全局函數: 這里其實是搭配使用的,基本上實現任意類型之間的強轉,引用一句話:強轉是極度危險的,除非你自己知道自己在干什么^_^ 另外,variant還幾乎重寫了所有運行符重載: 如此,我們也可以在這里增加自己的類型,實現數據的存儲,是無限擴展,但可能也需要自己重寫一部分的重載函數和運行符。 這個類中還有一些的操作,以后有時間再回來看看。
轉載于:https://www.cnblogs.com/hbright/p/9234973.html
總結
以上是生活随笔為你收集整理的类variant解剖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10优化开机进程
- 下一篇: 购物车完善版,客户余额及所购商品保存在文