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

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

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:源码分析之序列化》。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值