TSubclassOf 是提供 UClass 类型安全的模板类;如在创建一个投射物类,允许设计者指定伤害类型,可只创建一个 UClass 类型的 UPROPERTY,让设计者指定派生自 UDamageType 的类,或者可使用 TSubclassOf 模板强制要求此选择;
//可选择任意 Uclass
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;
//模板类告知编辑器的属性窗口只列出派生自 UDamageType 的类(作为属性选择)
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
TSubclassOf<UDamageType> DamageType;
除 UPROPERTY 安全外,还能获得 C++ 层级上的类型安全;如尝试进行不兼容 TSubclassOf 类型的相互指定,将出现编译错误;尝试指定泛型 UClass 时,它将执行一个运行时检查,以确定是否能指定;如运行时检查失败,结果数值为 nullptr;
UClass* ClassA = UDamageType::StaticClass();
TSubclassOf<UDamageType> ClassB;
ClassB = ClassA; // Performs a runtime check
TSubclassOf<UDamageType_Lava> ClassC;
ClassB = ClassC; // Performs a compile time check