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

原文地址:https://www.cnblogs.com/mcomco/p/11936919.html