UE中的 Cast
方法有两种常见的形式:Cast
和 CastChecked
。
Cast(Object)
: 这是一种安全的类型转换方法,如果转换成功,它返回一个非空的指针或引用,否则返回 nullptr
。这种类型的转换主要用于处理基类和派生类之间的关系。
AActor* MyActor = ...;
AMyCharacter* MyCharacter = Cast(MyActor);
if (MyCharacter) {
// 转换成功,可以使用 MyCharacter 对象
}
else {
// 转换失败,MyActor 不是 AMyCharacter 类型的对象
}
CastChecked(Object)
:这是一种类似的类型转换方法,但它在转换失败时会引发断言(Assertion),因此更适合在开发和调试阶段使用。在运行时,如果转换失败,它会触发断言并在编辑器中停止程序执行。
AActor* MyActor = ...;
AMyCharacter* MyCharacter = CastChecked(MyActor);
// 如果转换失败,这里会引发断言并停止程序执行
考虑一个基类 AAnimal
和两个派生类 ADog
和 ACat
的情况:
class AAnimal : public AActor {
// ...
};
class ADog : public AAnimal {
// ...
};
class ACat : public AAnimal {
// ...
};
在代码中,你可以使用 Cast
方法进行类型转换:
AAnimal* Animal = ...;
ADog* Dog = Cast(Animal);
if (Dog)
{
// 对象成功转换为 ADog 类型
}
else
{
// 对象不是 ADog 类型
}
ACat* Cat = CastChecked(Animal); // 这里会引发断言,因为 Animal 不是 ACat 类型
这样,你可以根据需要在不同的类之间进行安全的类型转换。确保在实际使用中考虑到可能的类型转换失败的情况。