1.7 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			1.7 KiB
		
	
	
	
	
	
	
	
ref
- 
功能描述: 使得函数的参数变成引用类型
 - 
元数据类型: bool
 - 
引擎模块: Blueprint, Parameter
 - 
作用机制: 在PropertyFlags中加入CPF_ReferenceParm
 - 
常用程度:★★★★★
 
普通参数和引用参数的区别是,在获取参数的时候,Ref类型会直接获得实参的引用,而不是拷贝。这样就可以避免拷贝,保存修改。
单纯的&参数是会被解析成输出返回参数,因此要用ref再继续标明。
测试代码:
//PropertyFlags:	CPF_Parm | CPF_OutParm | CPF_ZeroConstructor | CPF_IsPlainOldData | CPF_NoDestructor | CPF_HasGetValueTypeHash | CPF_NativeAccessSpecifierPublic 
	UFUNCTION(BlueprintCallable)
	FString MyFuncTestParam_Default(int& refValue);
	//PropertyFlags:	CPF_Parm | CPF_OutParm | CPF_ZeroConstructor | CPF_ReferenceParm | CPF_IsPlainOldData | CPF_NoDestructor | CPF_HasGetValueTypeHash | CPF_NativeAccessSpecifierPublic 
	UFUNCTION(BlueprintCallable)
	FString MyFuncTestParam_Ref(UPARAM(ref) int& refValue);
	UFUNCTION(BlueprintCallable)
	FString MyFuncTestParam_Copy(int value);
蓝图的代码:
原理:
ref参数在UHT生成时会用P_GET_PROPERTY_REF来获得
#define P_GET_PROPERTY(PropertyType, ParamName)													\
	PropertyType::TCppType ParamName = PropertyType::GetDefaultPropertyValue();					\
	Stack.StepCompiledIn<PropertyType>(&ParamName);
#define P_GET_PROPERTY_REF(PropertyType, ParamName)												\
	PropertyType::TCppType ParamName##Temp = PropertyType::GetDefaultPropertyValue();			\
	PropertyType::TCppType& ParamName = Stack.StepCompiledInRef<PropertyType, PropertyType::TCppType>(&ParamName##Temp);
