zoukankan      html  css  js  c++  java
  • 在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这个函数,编辑器会自动按照宏的内容生成代码。

  • 相关阅读:
    [排错] VO对象和POJO对象的关系
    celery(异步处理)+redis
    django开发经验(每日生鲜)
    开发流程
    linux 使用问题
    磁盘的操作
    文件系统的简单操作
    LINUX磁盘与档案系统
    文件操作
    Linux文档修改
  • 原文地址:https://www.cnblogs.com/mcomco/p/11936919.html
Copyright © 2011-2022 走看看