不真实的引擎支持通过UObject*通过Cast和dynamic_cast下传。
当向下转换USTRUCT对象时,这两种方法都不起作用:
Cast<T>的方法不支持向UScriptStructs的转换。/GR-是为cl.exe设置的),UE4使用实现的dynamic_cast<T*>作为指向USTRUCT的指针。因此编译器抛出C4541 (参见下面的示例)。在UE4.22中是否有一种方法可以安全地使用UE4的反射系统(因此,当static_cast<T*>等不是一个选项)?
如果不是,那么为什么UE4不支持通过其强制转换函数来下播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
}发布于 2019-05-11 17:16:59
发布于 2021-11-25 16:21:03
您还可以通过检查结构的类型是否是您要转换的类型的子类型,以及您要转换到的类型是结构类型的子类型来检查转换结构的安全性。如果这两种条件都是正确的,它们是相同的类型。
https://stackoverflow.com/questions/56090903
复制相似问题