我对原文的格式进行了一些调整并高亮了一些重点,以便阅读 以下为正文
大家好,我是刘茗。
enum class
在 C++11 标准中,除了传统的枚举 enum 关键字之外, 还新增了一个概念: enum class
enum class 组合具有 class 封装性的特性,作用域是确定的
在 UE4 中声明枚举有两种方式
// 第一种
UENUM()
namespace EWeapon
{
enum Type
{
EW_Handgun,
EW_shotgun
};
}
// 第二种
UENUM()
enum class EWeapon : uint8
{
EW_Handgun,
EW_shotgun
};
对于枚举中的元素,我们可以使用 UMETA 来对它进行修饰。
必须添加 BlueprintType 标识 如果想要显示中文,需要设置编码格式为 UTF-8
// 必须添加 BlueprintType 标识
UENUM(BlueprintType)
enum class EWeapon : uint8
{
EW_Handgun UMETA(DisplayName="Handgun"), // 如果想要显示中文,需要设置编码格式为 UTF-8
EW_shotgun UMETA(DisplayName="shotgun"),
};
如果枚举索引不想从 0 开始的话,使用下面的格式:
UENUM(BlueprintType)
enum class EWeapon : uint8
{
EW_Handgun = 1 UMETA(DisplayName="Handgun"),
EW_shotgun UMETA(DisplayName="shotgun"),
};
枚举指针的获取:
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EWeapon"), true);
UEnum 继承自 UField
实用函数
- 通过名字获取索引
int32 GetIndexByName(FName InName, EGetByNameFlags Flags = EGetByNameFlags::None) const;
- 通过索引获取名字
FName GetNameByIndex(int32 Index) const;
- 通过值获取索引下标
FORCEINLINE int32 GetIndexByValue(int64 InValue) const
- 通过下标获取值
FORCEINLINE int64 GetValueByIndex(int32 Index) const
- 通过下标获取显示名称
virtual FText GetDisplayNameTextByIndex(int32 InIndex) const;
- 获取索引最大值
int64 GetMaxEnumValue() const;
检查索引是否有效,加强代码稳定性
/** 检查 enum 是否有给定值的条目。 包括自动生成的 _MAX 条目。 */
bool IsValidEnumValue(int64 InValue) const;
/** 检查 enum 是否有给定名称的条目。 包括自动生成的 _MAX 条目。 */
bool IsValidEnumName(FName InName) const;
后续待补充 ……
本篇较基础,希望能在 UE4 的 C++ 开发上帮大家入门,感谢大家的支持!