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

在UE4C++中的宏的更多相关文章

  1. office中通过宏添加快捷键

    把“Microsoft 公式 3.0”作为一个按钮放在 2013中的快速访问工具栏的方法 在使用office办公软件的过程中,因为有的人还在使用office2003版本,所以在使用高版本的office ...

  2. 26.怎样在Swift中定义宏?

    Swift 中没有宏定义,苹果建议使用let 或者 get 属性来替代宏定义值.虽然没有#define,但我们仍然可以使用 #if 并配合编译的配置来完成条件编译.下面会列出Swift项目开发中的一些 ...

  3. IOS中利用宏将RGB值转换为UIColor(转)

    可以在pch文件中定义宏,这样整个项目就都可以用了! #define UIColorFromRGBValue(rgbValue) [UIColor colorWithRed:((float)((rgb ...

  4. sass中 混合宏 VS 继承 VS 占位符 各自的使用时机和特点

    初学者都常常纠结于这个问题“什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 举例代码见 2-24 行 编译出 ...

  5. iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

    问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...

  6. css编译工具Sass中混合宏,继承,占位符分别在什么时候使用

    //SCSS中混合宏使用 @mixin mt($var){ margin-top: $var; } .block { @include mt(5px); span { display:block; @ ...

  7. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...

  8. 如何在Excel中启用宏?

    OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...

  9. C语言中的宏定义

    目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...

随机推荐

  1. mvc_1_ex_stu_manage

    Mvc第一遍结束综合练习:带权限的学生管理系统程序的设计应该根据功能来进行.先来设想一下本练习的程序功能:学生信息管理.登录用户区分权限.出错应该给出提示.由此可以设想,完成以后的程序是下图的样子:主 ...

  2. English--并列句

    English|并列句 现在开始讲解英语中的最简单的长句,即并列句. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式, ...

  3. mybatis关联映射多对多

    项目开发中,多对多关系也是非常常见的关系 在数据库中创建表的脚本 table.sql CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, ...

  4. Python 的稀疏矩阵

    什么是稀疏矩阵 简单的说,如果一个矩阵中大部分元素为0,就被称为稀疏矩阵. 对于稀疏矩阵而言,实际存储的数据项很少.如果在计算机中采用传统的二维数组(Python中用二维列表)来存储稀疏矩阵,就会浪费 ...

  5. 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)

    一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...

  6. 软工团队第三次作业——编码组Alpha版本

    众志陈成组 柚荐--Alpha版本 编码部分 一.编码思路 思维导图如下 二.下载及操作方法 1.下载地址 GitHub地址:https://github.com/NyimaC/YouSuggest ...

  7. php中的Exception

    如果定制的EXCEPTION搞定了,默认的,就自然不在话下罗. 直接上最曲折的过程. InvalidIdException.php <?php namespace Bookstore\Excep ...

  8. vue-router有哪几种导航钩子?(具体怎么用的)

    三种,第一种:是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截.第二种:组件内的钩子第三种:单独路由独享组件 .

  9. G6 知识点

    Viser 一个基于 G2 实现的,为数据可视化工程师量身定制的工具. Viser-Graph 一个基于 G6 实现的,为呈现关系型数据的定制化工具. Mode 是 G6 提供的图上事件的管理机制. ...

  10. git在windows及linux(源码编译)环境下安装

    git在windows下安装 下载地址:https://git-scm.com/ 默认安装即可 验证 git --version git在linux下安装 下载地址:https://mirrors.e ...