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 类型
这样,你可以根据需要在不同的类之间进行安全的类型转换。确保在实际使用中考虑到可能的类型转换失败的情况。
本文介绍了UnrealEngine中Cast方法的两种形式:Cast<ToType>(Object)和CastChecked<ToType>(Object),分别用于安全类型转换和开发/调试时的断言触发。通过基类AAnimal及其派生类ADog和ACat的示例,展示了如何在不同类间进行类型转换并处理可能的失败情况。
1054

被折叠的 条评论
为什么被折叠?



