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

谢谢

相关推荐
R-sz3 小时前
虚幻 UE5 像素流多用户部署,像素流多实例部署
ue5·游戏引擎·虚幻
朗迹 - 张伟3 小时前
UE5粒子特效Niagara学习笔记
笔记·学习·ue5
zhangzhangkeji14 天前
UE5 C++(71):文件是否存在,文件夹是否存在,FPaths :: FileExists( const FString & InPath) ;
ue5
妙为14 天前
UE5角色穿过石头穿模
ue5·unreal engine5·角色穿越石头·穿模
技术策划Boring15 天前
2025年工作复盘:开放世界3A项目配置管线与性能监控的探索
游戏·ue5·虚幻·p4·perforce
zhangzhangkeji17 天前
UE5 C++(70-2):定义成员函数 getCleanDirectory(..) 和枚举类 EFileDirectoryType,来获得目录
ue5
avi911118 天前
UE4-UE5虚幻引擎-前置学习三,优化,基础CPP
ue5·ue4·游戏开发·虚幻·游戏优化·游戏代码
zhangzhangkeji18 天前
UE5线程进阶(3-2):任务图的相关源码整理。 FGraphEvent 与 TGraphTask 的区别和联系
ue5
zhangzhangkeji20 天前
UE5线程进阶(3-1):
ue5