在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这个函数,编辑器会自动按照宏的内容生成代码。
在UE4C++中的宏的更多相关文章
- office中通过宏添加快捷键
把“Microsoft 公式 3.0”作为一个按钮放在 2013中的快速访问工具栏的方法 在使用office办公软件的过程中,因为有的人还在使用office2003版本,所以在使用高版本的office ...
- 26.怎样在Swift中定义宏?
Swift 中没有宏定义,苹果建议使用let 或者 get 属性来替代宏定义值.虽然没有#define,但我们仍然可以使用 #if 并配合编译的配置来完成条件编译.下面会列出Swift项目开发中的一些 ...
- IOS中利用宏将RGB值转换为UIColor(转)
可以在pch文件中定义宏,这样整个项目就都可以用了! #define UIColorFromRGBValue(rgbValue) [UIColor colorWithRed:((float)((rgb ...
- sass中 混合宏 VS 继承 VS 占位符 各自的使用时机和特点
初学者都常常纠结于这个问题“什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 举例代码见 2-24 行 编译出 ...
- iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用
问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...
- css编译工具Sass中混合宏,继承,占位符分别在什么时候使用
//SCSS中混合宏使用 @mixin mt($var){ margin-top: $var; } .block { @include mt(5px); span { display:block; @ ...
- VS2010中编写宏添加作者信息与函数注释
这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...
- 如何在Excel中启用宏?
OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...
- C语言中的宏定义
目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...
随机推荐
- html5单词
< meta charset = " UTF-8 " > 国内编码 (meta-标签用来描述一个HTML网页文档的属性 charset-字 ...
- 【Java深入研究】11、深入研究hashmap中的hash算法
一.简介 大家都知道,HashMap中定位到桶的位置 是根据Key的hash值与数组的长度取模来计算的. JDK8中的hash 算法: static final int hash(Object key ...
- Android四大组件——Activity跳转动画、淡出淡入、滑出滑入、自定义退出进入
Activity跳转动画.淡入淡出.滑入滑出.自定义退出进入 前言: 系统中有两个定义好的Activity跳转动画:fade_in.fade_out.slide_in_left.slide_out_r ...
- C#使用SMTP协议发送验证码到QQ邮箱
C#使用SMTP协议发送验证码到QQ邮箱 在程序设计中,发送验证码是常见的一个功能,用户在注册账号时或忘记密码后,通常需要发送验证码到手机短信或邮箱来验证身份,此篇博客介绍在C#中如何使用SMTP协议 ...
- Java深入学习(3):线程池原理
线程池的特点: 降低资源:通过重复利用已创建的线程降低线程创建和销毁的损耗 提高效率:当任务到底时,不需要等待,立即执行 方便管理:统一分配,调优和监控等 线程池的创建方式: 1.CachedThre ...
- ML-线性 SVM 推导
Max Margin svm 即Suport Vector Machine, 中文意为:支持向量机. 对于二分类问题, 在样本空间中(即便是多维向量, 在空间中可表示为一个点). svm的核心思想就是 ...
- linux防火墙和xshell的链接
centos7用的firewalld 1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: ...
- zabbix4.0自动发现主机
一.自动发现主机的需求 由于机房设备拆分,迁移服务器后,原来的监控失效.再重新搭建监控平台后,批量主机手动添加真的是很麻烦. 所以就用到了zabbix的自动发现功能 二.配置自动发现服务 配置--&g ...
- 实战 MySQL 8.0.17 Clone Plugin(转)
背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication)功能,后者加入了克隆插件(Clone Plugin)功能.今天我们 ...
- 《剑指Offer》-006 - Java版快速幂 -解决n的m次方的问题
#### 如题 (总结要点) 原文链接 : 1.主题 package blank; /** * 类的详细说明 给定一个double类型的浮点数base和int类型的整数exponent.求base的e ...