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

谢谢

相关推荐
DoomGT18 小时前
Design - 一些免费图标网站
ue5·ue4·虚幻·虚幻引擎·unreal engine
晴夏。1 天前
UE5 GASP技术浅析
ue5·gasp
邪修king1 天前
UE5 TA 核心修炼:材质与纹理艺术全解 —— 从 PBR 理论到工业级材质实战
c++·后端·游戏·ue5·材质
SCLchuck2 天前
UE5 地形材质UV
ue5·材质·uv
UTwelve3 天前
【UE】材质与半透明 - 01. 基于Masked遮罩的抖动半透明 DitherMask
ue5·材质·虚幻引擎·着色器
晴夏。3 天前
UE5 motion warping 运动扭曲的用途
运维·ue5
蓝图大法3 天前
ue5 血条 渲染方形的分辨率 血条缩放的问题
ue5
邪修king3 天前
UE5 进阶篇第一弹:中期架构升级 —— 组件化开发与 Gameplay 框架实战
c++·游戏·架构·ue5
Heaphaestus,RC4 天前
Slate到UMG的封装原理揭秘
开发语言·ue5