Unreal Engine支持通过
Cast<T>
和自定义实现的dynamic_cast<T*>
进行UObject*
的向下转换。但是,当向下转换USTRUCT
对象时,这两种方法都无法使用。
Cast<T>
方法不支持转换为UScriptStructs
。- UE4 编译时没有开启 RTTI(例如,对于 cl.exe 设置了
/GR-
),而 UE4 对指向USTRUCT
的指针使用实现的dynamic_cast<T*>
。因此编译器抛出 C4541(见下面的示例)。
在 UE4.22 中是否有一种使用 UE4 的反射系统来 安全地 向下转换 USTRUCT
的方法(因此当 static_cast<T*>
等不可行时)?
如果没有,那么为什么 UE4 不支持通过其 Cast 函数向下转换 USTRUCT
?例如,它们应该被引用或者是与蓝图相关的原因吗?
例如(2),在UE4项目中使用:
#pragma once
#include "CoreMinimal.h"
USTRUCT()
struct MyStructBase
{
virtual ~MyStructBase() = default;
};
USTRUCT()
struct MyStructDerived : public MyStructBase
{};
void TestFunc()
{
auto lvalue = MyStructBase{};
auto lvaluePtr = &lvalue;
auto o = dynamic_cast<MyStructDerived*>(lvaluePtr); // cl.exe throws C4541
}