在main函数前执行一些代码,加入一些预定义信息.
具体方式:
1.每个定义了GENERATED_BODY()的类,都会自定义一些全局静态变量,就是这些变量初始化的时候,在main函数之前执行的代码
![](https://img.haomeiwen.com/i12461829/d1daa16840ee1001.png)
通过这些宏定义和ue4的自身预处理,会在XXX.generated.h文件中生成相关定义
![](https://img.haomeiwen.com/i12461829/ff3ef4dc24d7037e.png)
![](https://img.haomeiwen.com/i12461829/0bebfad915dd2160.png)
经过不断的变换,最终定义了这个全局静态变量,并且,这个变量还不是指针,是个类的实体对象,即:是要进行初始化的,并且在main函数之前调用构造函数.
![](https://img.haomeiwen.com/i12461829/3b1d89b4f150a9f1.png)
![](https://img.haomeiwen.com/i12461829/d01f997238a5ef5c.png)
跳入TClassCompiledInDefer类中看一下具体定义
![](https://img.haomeiwen.com/i12461829/79b25af3c6b441a1.png)
我们看到该构造函数里面调用了UClassCompiledInDefer函数,具体看一下这个函数是怎么实现的.
红线框住的东西就是各种存储UClassInfo的容器.
![](https://img.haomeiwen.com/i12461829/c4ba804963491224.png)
![](https://img.haomeiwen.com/i12461829/2cd29897c6112a81.png)
在编辑器启动的时候,main函数之前,就注册了这些编译信息.
![](https://img.haomeiwen.com/i12461829/3d831c11f867363b.png)
网友评论