2023年2月23日
虚幻引擎(UE4 UE5)自定义TMap键值类型
前言
开发场景中,遇到了使用TMap时,将键值类型修改到项目中自定义的数据类型。如果不进行额外编码,编译过程会出现错误。虚幻引擎对于想要做为TMap键值的数据类型有额外的要求,必须满足实现hash序列,和常规的比较运算符重载。下面的代码,简单的为大家展示了如何完成TMap键值类型的自定义。
操作
1、声明结构体类型(头文件中),注意实现比较重载运算(这是必须的)。
//声明在头文件中
struct FMapKey
{
public:
int32 KeyID;
bool operator ==(const FMapKey& Other) const
{
return KeyID == Other.KeyID;
}
};
其中的KeyID,是用来测试的,主要是用来比较两个MapKey是否相同(是一种比较规则的数据依据)
2、构建Hash全局函数,用来讲FMapKey进行Hash转换
//声明在全局域中,我声明定义在了头文件中
inline uint32 GetTypeHash(const FMapKey& Explain)
{
return Explain.KeyID;//未真正进行Hash运算,只是将KeyID作为Hash值
}
此函数主要目的是为了将键值转换为Hash值,算法部分由设计者提供并维护,引擎端只需要一个uint32的值即可。Hash算法应保证不同的键值结果不同,相同的键值,结果相同。
结语
可以被用作TMap键值类型的有:基础数据类型,指针,虚幻个别自定义类型。所以拓展键值类型,添加自己的类型作为键值类型,是非常有必要的。
引擎版本:4.27.2