ue4 函数和宏区别_深入理解UE4:源码分析之类型反射

news/2024/7/7 7:25:18

文章末尾是我精心制作反射系统大概流程图,其中体现了反射过程的的收集、注册以及重点变量的赋值,还有重点函数的流程。

tips:

  • UClass中WithinClass的意义是,该类实例的Outer必须是什么类型。具体到各个类中,其限定方式的实现方法是:

基类UObject中声明了WithinClass:

class COREUOBJECT_API UObject : public UObjectBaseUtility
{
	typedef UObject WithinClass;
};

同样在UClass、UProperty、UFunction等类中使用DECLARE_WITHIN这个宏也有类似的声明。

  • CoreUObject相关的类,其对应的UClass是如何构建的?

是通过IMPLEMENT_CORE_INTRINSIC_CLASS这个宏,可通过搜索其引用查看具体哪些类使用该宏,如:

0efe3ca82d95bbe824d64e5fc1db8f20.png
  • CoreUObject模块中相关的UClass、UScriptStruct、UEnum对应的.gen.h和.gen.cpp存放位置:

074ef47ca486f4b68e6544d65089b0ef.png

流程图:

d1691607f92d81480ac47f5f399b357a.png
流程图1

几个总结:

  1. UClass对象的Outer是各个package对象。可以到生成的.gen.h中观察UClass属于哪个package
  2. CDO的Outer同其对应的UClass是一致的。这体现在CreateDefaultObject()中的ClassDefaultObject = StaticAllocateObject(this, GetOuter()....);
  3. 引擎中大量的类遍布于各个Module,引擎启动时会依次加载依赖的Module,此时这些Module中的Class才会开始收集,之后到UObjectLoadAllCompiledInDefaultProperties()函数中注册,再创建其CDO。
  4. 项目中的UClass收集是从FProjectManager::LoadModulesForProject()开始的可以跟一下看看。

另外当UClass在注册之后,创建CDO时可能会导致LoadPackage,这部分内容我也有详细的分析,在我的另一篇文章《深入理解UE4:源码分析之序列化》。


http://www.niftyadmin.cn/n/1980855.html

相关文章

什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)...

1. HADOOP背景介绍 1. 1.1 什么是HADOOP 1. HADOOP是apache旗下的一套开源软件平台 2. HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3. HADOOP的核心组件有 A. …

dosubmit 成功不成功_宁愿不成功,也要成长!

著名的电视节目主持人杨澜说过:“宁愿不成功,也要成长。”一个人只有成长了,才有成功的可能。成功只是多年努力瞬间的一次爆发。一个人可能永远躺在成功的功劳簿上,享受美好,更大的进步还需要不断坚持不懈、持之以恒的…

工业机器人打磨抛光编程员工资_打磨抛光机器人调研报告

打磨抛光机器人调研报告第一章:打磨抛光机器人概述1、定义:打磨抛光机器人是现代工业机器人众多种类的一种,用于替代传统人工进行工件的打磨抛光工作。2、用途:主要用于工件的表面打磨,棱角去毛刺,焊缝打磨…

Requirejs定义模块

模块可以很好的定义作用域来避免全局名称空间污染,它可以显示的定义出函数间的依赖关系,而不需要引用全局变量。RequireJS可以加载多个不同的模块,虽然加载的顺序不一样,但是能保证依赖的顺序是正确的。1. 当模块中只有键值对时&…

Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS

本文试图以通俗易通的方式介绍Https的工作原理,不纠结具体的术语,不考证严格的流程。我相信弄懂了原理之后,到了具体操作和实现的时候,方向就不会错,然后条条大路通罗马。阅读文本需要提前大致了解对称加密、非对称加密…

5 添加数据获得id_按这个步骤,轻松测评数据库性能

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇文章主要谈谈数据库发展周期中所面临的问题及优化方案,有不对的地方,小编接受大家的指正~!使用 Jm…

vnpy 查询持仓量_Vnpy 中增加TD指标计算及BOLL指标的运行情况

马克序列 Demark Sequential (TD 序列 ) 也算是一个常见的趋势指标,但是Vnpy中默认没有实现。在Vnpy的安装目录Lib\site-packages\vnpy\trader下的utilty.py的ArrayManager中增加具体实现即可。def td(self, arrayFalse):close_np self.closeclose_shift np.empty…

51Nod-1011 最大公约数GCD【欧几里得算法】

1011 最大公约数GCD基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 0 难度&#xff1a;基础题输入2个正整数A&#xff0c;B&#xff0c;求A与B的最大公约数。Input2个数A,B&#xff0c;中间用空格隔开。(1< A,B < 10^9) Output输出A与B的最大公约数。…