在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这个函数,编辑器会自动按照宏的内容生成代码。

猜你喜欢

转载自www.cnblogs.com/mcomco/p/11936919.html