UE中的Cast和CastChecked

本文介绍了UnrealEngine中Cast方法的两种形式:Cast<ToType>(Object)和CastChecked<ToType>(Object),分别用于安全类型转换和开发/调试时的断言触发。通过基类AAnimal及其派生类ADog和ACat的示例,展示了如何在不同类间进行类型转换并处理可能的失败情况。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

        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 和两个派生类 ADogACat 的情况:

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 类型

        这样,你可以根据需要在不同的类之间进行安全的类型转换。确保在实际使用中考虑到可能的类型转换失败的情况。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值