查看“U++ 运行时类型信息和类型转换”的源代码
←
U++ 运行时类型信息和类型转换
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
由于UObject是虚幻引擎反射系统的一部分,它们始终知道它们是哪些UClass,并可以在运行时做出有关类型的决定和类型转换。 在原生代码中,每个UObject类都将自定义Super类型定义设置为其父类,从而可以轻松控制覆盖行为。示例: class AEnemy : public ACharacter { virtual void Speak() { Say("Time to fight!"); } }; class AMegaBoss : public AEnemy { virtual void Speak() { Say("Powering up!"); Super::Speak(); } }; 如你所见,调用Speak将会让MegaBoss说"Powering up!Time to fight!"。 此外,你可以使用模板化Cast函数或者查询(如果Object是使用IsA的特定类)安全地将Object从基类转换为更衍生性类。另一个简短示例: class ALegendaryWeapon : public AWeapon { void SlayMegaBoss() { TArray<AEnemy> EnemyList = GetEnemyListFromSomewhere(); // The legendary weapon is only effective against the MegaBoss for (AEnemy Enemy :EnemyList) { AMegaBoss* MegaBoss = Cast<AMegaBoss>(Enemy); if (MegaBoss) { Incinerate(MegaBoss); } } } }; 这里我们使用了Cast来尝试将AEnemy转换为AMegaBoss。如果所提及Object实际上不是AMegaBoss(或者其子类),则Cast会返回空指针,我们可以适当的做出反应。在以上代码中,Incinerate将仅对MegaBoss调用。
返回至“
U++ 运行时类型信息和类型转换
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息