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