# TSubclassof

TSubclassOf 是一个提供UClass的类型安全的模板类,例如,让我们想象一下你正在创建一个允许设计者指定伤害类型的发射炮弹的类,你可以只创建一个有UPROPERTY类型的UClass,然后告诉设计者总是指定一个从UDamageType继承的类,或者使用TSubClassOf来强制设计者做这样的选择,下面的这两段样例代码说明了不同:

/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;
1
2
3

对比于:

/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
TSubclassOf<UDamageType> DamageType;
1
2
3

在第一段声明里,任何UClass都可被选择。 在第二段声明里,模板类告诉编辑器的属性窗口只列出继承自UDamageType的类来作为该属性的选择。

除了这种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
1
2
3
4
5
6
7
8
9