【发布时间】:2019-09-29 03:33:33
【问题描述】:
虚幻引擎支持通过Cast<T> 和custom implementation of dynamic_cast<T*> 向下转换UObject*。
当向下转换USTRUCT 对象时,两种方法都不起作用:
-
Cast<T>的方法不支持转换为UScriptStructs。 - UE4 在没有 RTTI 的情况下编译(例如,为 cl.exe 设置了
/GR-),并且 UE4 使用实现的dynamic_cast<T*>指向USTRUCTs 的指针。因此编译器会抛出C4541(参见下面的示例)。
在 UE4.22 中是否有一种方法可以安全地使用 UE4 的反射系统向下转换 USTRUCTs(所以当 static_cast<T*> 等不是一个选项时)?
如果不是,那为什么 UE4 不支持通过 Cast 函数向下转换 USTRUCTs?例如。它们不应该被引用还是蓝图相关的原因?
(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
}
【问题讨论】:
标签: c++ reflection polymorphism unreal-engine4