1.7 KiB
1.7 KiB
NoExport
-
功能描述: 指定UHT不要用来自动生成注册的代码,而只是进行词法分析提取元数据。
-
引擎模块: UHT
-
元数据类型: bool
-
作用机制: 在ClassFlags中增加EClassFlags: CLASS_NoExport
-
常用程度: 0
指定UHT不要用来自动生成注册的代码,而只是进行词法分析提取元数据。
引擎的NoExportTypes.h里大量都是这种类型,专门提供给UHT来提取信息的。一般会用#if !CPP //noexport class来包裹,来避免编译。同时在另一个地方会定义这个类。因为StaticRegisterNatives##TClass没有生成,所以GetPrivateStaticClass不能调用成功,所以不能NewObject。一般noexport和Intrinsic都是配合使用的。因为DECLARE_CLASS_INTRINSIC内部会声明static void StaticRegisterNatives##TClass() {} 来允许成功调用。
引擎里的结构倒是经常用noexport来阻止生成UHT注册。因为结构其实不需要调用GetPrivateStaticClass来创建元数据。只要有Z_Construct_UScriptStruct_XXX来生成构造相应的UScriptStruct对象就行。
测试代码:
UCLASS(noexport)
class INSIDER_API UMyClass_NoExport :public UObject
{
GENERATED_BODY()
public:
};
测试结果:
编译的时候生成错误:
error LNK2019: unresolved external symbol "private: static void __cdecl UMyClass_NoExport::StaticRegisterNativesUMyClass_NoExport(void)" (?StaticRegisterNativesUMyClass_NoExport@UMyClass_NoExport@@CAXXZ) referenced in function "private: static class UClass * __cdecl UMyClass_NoExport::GetPrivateStaticClass(void)" (?GetPrivateStaticClass@UMyClass_NoExport@@CAPEAVUClass@@XZ)