你想要???想要你就說出來嘛,你不說我怎么知道你想要呢?

引言

上文講到了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;
}

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式