你想要啊?想要你就说出来嘛,你不说我怎么知道你想要呢?
引言
上文讲到了UE的类型系统结构,以及UHT分析源码的一些宏标记设定。在已经进行了类型系统整体的设计之后,本文将开始讨论接下来的步骤。暂时不讨论UHT的细节,假设UHT已经分析得到了足够的类型元数据信息,下一步就是利用这个信息在程序内存中构建起前文的类型系统结构,这个过程我们称之为注册。同一般程序的构建流程需要经过预处理、编译、汇编、链接一样,UE为了在内存中模拟构建的过程,在概念上也需要以下几个阶段:生成,收集,注册,链接。总体的流程比较繁杂,因此本文首先开始介绍第一阶段,生成。在生成阶段,UHT分析我们的代码,并生成类型系统的相关代码。
Note1:生成的代码和注册的过程会因为HotReload功能的开启与否有些不一样,因此为了最简化流程阐述,我们先关闭HotReload,关闭的方式是在Hello.Build.cs里加上一行:Definitions.Add("WITH_HOT_RELOAD_CTORS=0");
Note2:本文开始及后续会简单的介绍一些用到的C++基础知识,但只是点到为止,不做深入探讨。
C++ Static Lazy初始化模式
一种我们常用,也是UE中常用的单件懒惰初始化模式是:
Hello* StaticGetHello(){ static Hello* obj=nullptr; if(!obj) { obj=... } return obj; } 或者Hello& StaticGetHello(){ static Hello obj(...); return obj; }
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26