你想要???想要你就說出來嘛,你不說我怎么知道你想要呢?
引言
上文講到了UE的類型系統(tǒng)結(jié)構(gòu),以及UHT分析源碼的一些宏標(biāo)記設(shè)定。在已經(jīng)進(jìn)行了類型系統(tǒng)整體的設(shè)計(jì)之后,本文將開始討論接下來的步驟。暫時(shí)不討論UHT的細(xì)節(jié),假設(shè)UHT已經(jīng)分析得到了足夠的類型元數(shù)據(jù)信息,下一步就是利用這個(gè)信息在程序內(nèi)存中構(gòu)建起前文的類型系統(tǒng)結(jié)構(gòu),這個(gè)過程我們稱之為注冊(cè)。同一般程序的構(gòu)建流程需要經(jīng)過預(yù)處理、編譯、匯編、鏈接一樣,UE為了在內(nèi)存中模擬構(gòu)建的過程,在概念上也需要以下幾個(gè)階段:生成,收集,注冊(cè),鏈接??傮w的流程比較繁雜,因此本文首先開始介紹第一階段,生成。在生成階段,UHT分析我們的代碼,并生成類型系統(tǒng)的相關(guān)代碼。
Note1:生成的代碼和注冊(cè)的過程會(huì)因?yàn)镠otReload功能的開啟與否有些不一樣,因此為了最簡(jiǎn)化流程闡述,我們先關(guān)閉HotReload,關(guān)閉的方式是在Hello.Build.cs里加上一行:Definitions.Add("WITH_HOT_RELOAD_CTORS=0");
Note2:本文開始及后續(xù)會(huì)簡(jiǎn)單的介紹一些用到的C++基礎(chǔ)知識(shí),但只是點(diǎn)到為止,不做深入探討。
C++ Static Lazy初始化模式
一種我們常用,也是UE中常用的單件懶惰初始化模式是:
Hello* StaticGetHello(){ static Hello* obj=nullptr; if(!obj) { obj=... } return obj; } 或者Hello& StaticGetHello(){ static Hello obj(...); return obj; }
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26