在UE4C++中的宏


1. UE4藍圖的宏

  在藍圖中,我們可以把一堆經常使用的節點封裝為一個宏,然后通過多次使用這個宏,達到了減少重復代碼量的效果。

  如圖:

  

 

   

 

2. UE4C++中的宏

  那么,在UE4的C++中怎么實現宏呢?

  看代碼:

  

//這里的##是把輸入的參數FuncName填進FuncName##Param中;
//在宏里,每一行都需要在尾部加\
//經測試,最后一行的“}”的\加不加都可以

#define DDMODFUNC(FuncName);\
    struct FuncName##Param : DDParam \
    {\
        FuncName##Param() { ParamPtr = NULL;}\
    }; \
    FuncName##Param* FuncName##RT(int32 ModuleIndex, FName FunctionName)\
    {\
        DDModuleAgreement Agreement;\
        Agreement.ModuleIndex = ModuleIndex;\
        Agreement.FunctionName = FunctionName;\
        FuncName##Param* Param = new FuncName##Param();\
        ExecuteFunction(Agreement, Param);\
        return Param;\
    }\
    void FuncName(int32 ModuleIndex, FName FunctionName)\
    {\
        DDModuleAgreement Agreement;\
        Agreement.ModuleIndex = ModuleIndex;\
        Agreement.FunctionName = FunctionName;\
        FuncName##Param* Param = new FuncName##Param();\
        ExecuteFunction(Agreement, Param);\
        delete Param;\
    }\

  內容需要結合前后文理解,故內容看不懂沒關系,關鍵是:

  1. 宏名要大寫;

  2. ##是把輸入的參數FuncName填進FuncName##Param中;

  3. 每行代碼結尾都要加“\”

  4. 要加 #define

 

  如何使用宏呢:

在.h中:
    UCLASS()
class RACEFRAME_API ALifeCallActor : public ADDActor
{
    GENERATED_BODY()

protected:
    DDMODFUNC(HappyFunc)
}

在.cpp中:
    void ALifeCallActor::DDEnable()
{
    HappyFunc((int32)ERCGameModule::HUD, "TestNoParam");
}

  內容需要結合前后文理解,故內容看不懂沒關系,關鍵是:

  1. 如DDMODFUNC(HappyFunc)中,直接調用,不需要加“;”;

  2. 在.cpp中,直接使用HappyFunc這個函數,編輯器會自動按照宏的內容生成代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM