Unreal Engine中TSharedPtr的动态类型转换替代方案咨询
你要找的替代std::dynamic_pointer_cast的方法是DynamicCastSharedPtr<To>(const TSharedPtr<From>&),这是Unreal专门为TSharedPtr提供的运行时类型转换函数,转换失败时会返回空的TSharedPtr,完全满足你对运行时类型检查的需求。
用法示例
// 假设BaseClass是基类,DerivedClass是继承自BaseClass的派生类 TSharedPtr<BaseClass> BasePtr = MakeShared<DerivedClass>(); TSharedPtr<DerivedClass> DerivedPtr = DynamicCastSharedPtr<DerivedClass>(BasePtr); if (DerivedPtr.IsValid()) { // 转换成功,可安全调用DerivedClass的成员 DerivedPtr->DerivedSpecificMethod(); } else { // 转换失败,BasePtr指向的对象不是DerivedClass类型 }
注意事项
- 该函数定义在
CoreMisc.h头文件中,Unreal项目通常会通过其他核心头文件间接引入,若编译时找不到,可手动添加#include "CoreMisc.h" - 对于非UObject类型的转换,要求基类必须包含虚函数(底层依赖C的RTTI);对于UObject类型,则利用Unreal自身的反射系统实现转换,无需额外开启C RTTI
- 不要和UObject裸指针的
Cast<To>(Object*)混淆,DynamicCastSharedPtr是专门针对TSharedPtr的封装
内容的提问来源于stack exchange,提问作者Notrum666
相关产品推荐
相关产品推荐

