(18)UE5 接口里的两个宏 GENERATED_UINTERFACE_BODY() 与 GENERATED_IINTERFACE_BODY()

(34)先是 GENERATED_UINTERFACE_BODY( )

cpp 复制代码
UINTERFACE(MinimalAPI, meta=(CannotImplementInterfaceInBlueprint))
class UNavAgentInterface : public UInterface  // GENERATED_UINTERFACE_BODY()
{
	// GENERATED_UINTERFACE_BODY() 这个宏展开后,就是下面的代码
	__pragma (warning(push)) 
	__pragma (warning(disable: 4995)) 
	__pragma (warning(disable: 4996)) 
private: 
	static void StaticRegisterNativesUNavAgentInterface(); 

	friend struct Z_Construct_UClass_UNavAgentInterface_Statics; 

public: 
private: 
	UNavAgentInterface& operator=(UNavAgentInterface&&); 

	UNavAgentInterface& operator=(const UNavAgentInterface&); 

	__declspec(dllimport) static UClass* GetPrivateStaticClass(); 

public: 
	static constexpr EClassFlags StaticClassFlags = EClassFlags((CLASS_Abstract | CLASS_Interface | CLASS_Intrinsic)); 
	
	typedef UInterface Super; 
	typedef UNavAgentInterface ThisClass;

	inline static UClass* StaticClass() {	return GetPrivateStaticClass();	} 
	
	inline static const TCHAR* StaticPackage() { return L"/Script/Engine";	} 
	
	inline static EClassCastFlags StaticClassCastFlags() {	return CASTCLASS_None;	} 
	
	inline 
	void* operator new(const size_t InSize, EInternal InInternalOnly, 
		UObject* InOuter = (UObject*)GetTransientPackage(), 
		FName InName = NAME_None, EObjectFlags InSetFlags = RF_NoFlags) {
		return StaticAllocateObject(StaticClass(), InOuter, InName, InSetFlags);
	} 
	
	inline void* operator new(const size_t InSize, EInternal* InMem) {	return (void*)InMem; } 
	
	inline void operator delete(void* InMem) {	::operator delete(InMem);	} 
	
	friend FArchive& operator<<(FArchive& Ar, UNavAgentInterface*& Res) { return Ar << (UObject*&)Res;	} 
	
	friend void operator<<(FStructuredArchive::FSlot InSlot, UNavAgentInterface*& Res) { InSlot << (UObject*&)Res;	} 
	
	__declspec(dllimport) UNavAgentInterface(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); 
	
	static void __DefaultConstructor(const FObjectInitializer& X) {	new((EInternal*)X.GetObj())UNavAgentInterface(X); } 
	
	__declspec(dllimport) UNavAgentInterface(FVTableHelper& Helper);;
	
	static UObject* __VTableCtorCaller(FVTableHelper& Helper) {
		return new (EC_InternalUseOnlyConstructor, (UObject*)GetTransientPackage(), 
			NAME_None, RF_NeedLoad | RF_ClassDefaultObject | RF_TagGarbageTemp) UNavAgentInterface(Helper);
	}; 

private: 
	UNavAgentInterface(UNavAgentInterface&&); 
	UNavAgentInterface(const UNavAgentInterface&); 

public: 
	__declspec(dllimport) virtual ~UNavAgentInterface(); 
	__pragma (warning(pop));
}; // 接口的双反射系统

(35) 原版代码,有这两个宏

(36) 宏展开

(37)

谢谢

相关推荐
mengzhi啊11 小时前
UE5关卡切换 传统加载(阻塞)vs流式加载(非阻塞)。还有加载关卡3种办法
ue5
电子云与长程纠缠14 小时前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
Duo1J2 天前
【UE】Slate 编辑器工具开发03 - 节点编辑器 (EdGraph)
ue5·编辑器·游戏引擎·ue4
directx3d_beginner3 天前
26,怪物受击接口改为C++
ue5
远离UE46 天前
UE5 UV邻接 Niagara潜水模拟 学习笔记
ue5·uv
AA陈超6 天前
005 T03 — 角色基类与移动系统 详细功能设计文档
ue5
AA陈超6 天前
004 T02 - 俯视角摄像机系统 设计文档
网络·c++·ue5·虚幻引擎
AA陈超7 天前
006 T03 — 蓝图操作指南
c++·游戏·架构·ue5·github·虚幻引擎
Duo1J9 天前
【UE】Slate 编辑器工具开发01 - Slate语法 & 常用控件
ue5·编辑器·游戏引擎·ue4
朗迹 - 张伟9 天前
UE5.7 PCG从入门到精通系列课程【第五课:PCG沿一条样条线生成物体】
ue5·pcg