Есть ли в UE4.22 метод безопасного понижения USTRUCT с использованием системы отражения UE4 (поэтому, когда static_cast и т. Д. Не вариант)?
Я знаю, что это не идеалрешение и может не подходить для вашего случая, но если вы не хотите использовать голый static_cast
, вы можете предоставить шаблонную функцию, которая выполняет приведение и добавить static_assert
с TIsDerivedFrom
внутри, чтобы получить ошибку времени компиляциибыло ли приведение к сбою.
template<typename T, typename U>
T* CastStruct(U* base)
{
static_assert(TIsDerivedFrom<T, U>::IsDerived, "Type T has to be derived from U.");
return static_cast<T*>(base);
}
почему UE4 не поддерживает понижение USTRUCTs
своими функциями приведения?
Это потому, что структуры должны быть легковеснымисущности в Unreal Engine и, следовательно, отражение - которое требуется для работы Cast
- для них не предусмотрено.
Будьте осторожны при использовании указателей на USTRUCTs
, поскольку они не только не поддерживаются отражением, но итакже сборщик мусора, сериализаторы, пользовательский интерфейс и т. д. При работе с ними вы должны знать, что вы делаете.