(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)

谢谢

相关推荐
1204157137 肖哥8 小时前
UE5.7 场景打光管线流程_【雪山】
ue5
weixin_4046793110 小时前
虚幻5 替代小白人角色的完整逻辑
ue5
1204157137 肖哥3 天前
UE5.7 灯光详解
ue5
狂云歌4 天前
AI写UE的3Dgame
人工智能·3d·ue5·游戏程序
日月云棠8 天前
UE5源码分析之Editor——Blutility模块全面分析
ue5
日月云棠8 天前
UE5源码分析之Editor——BehaviorTreeEditor模块全面分析
ue5
日月云棠8 天前
UE5源码分析之Editor——AssetTagsEditor模块全面分析
ue5
远离UE49 天前
UE5 显存 虚拟内存 深入学习笔记
笔记·学习·ue5
日月云棠9 天前
UE5源码分析之Editor——AnimationSettings模块全面分析
ue5
远离UE410 天前
UE5 SF_VertexShader 如何使用
ue5