UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SubclassOfField.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "UObject/Field.h"
7
8#include <type_traits>
9
10template <typename T>
12
13template <typename T>
15{
16 enum { Value = false };
17};
18
19template <typename T> struct TIsTSubclassOfField< TSubclassOfField<T>> { enum { Value = true }; };
20template <typename T> struct TIsTSubclassOfField<const TSubclassOfField<T>> { enum { Value = true }; };
21template <typename T> struct TIsTSubclassOfField< volatile TSubclassOfField<T>> { enum { Value = true }; };
22template <typename T> struct TIsTSubclassOfField<const volatile TSubclassOfField<T>> { enum { Value = true }; };
23
27template <typename T>
29{
30private:
31 template <typename U>
32 friend class TSubclassOfField;
33
34public:
35 [[nodiscard]] TSubclassOfField() = default;
40 ~TSubclassOfField() = default;
41
44 : Class(From)
45 {
46 }
47
49 template <
50 typename U
52 !TIsTSubclassOfField<std::decay_t<U>>::Value &&
53 std::is_convertible_v<U, FFieldClass*>
54 )
55 >
57 : Class(From)
58 {
59 }
60
62 template <
63 typename OtherT
64 UE_REQUIRES(std::is_convertible_v<OtherT*, T*>)
65 >
70
72 template <
73 typename OtherT
74 UE_REQUIRES(std::is_convertible_v<OtherT*, T*>)
75 >
77 {
78 Class = Other.Class;
79 return *this;
80 }
81
84 {
85 Class = From;
86 return *this;
87 }
88
90 template <
91 typename U
93 !TIsTSubclassOfField<std::decay_t<U>>::Value &&
94 std::is_convertible_v<U, FFieldClass*>
95 )
96 >
97 inline TSubclassOfField& operator=(U&& From)
98 {
99 Class = From;
100 return *this;
101 }
102
104 [[nodiscard]] inline FFieldClass* operator*() const
105 {
106 if (!Class || !Class->IsChildOf(T::StaticClass()))
107 {
108 return nullptr;
109 }
110 return Class;
111 }
112
115 {
116 return **this;
117 }
118
121 {
122 return **this;
123 }
124
127 {
128 return **this;
129 }
130
136 [[nodiscard]] inline T* GetDefaultObject() const
137 {
138 FField* Result = nullptr;
139 if (Class)
140 {
141 Result = Class->GetDefaultObject();
142 check(Result && Result->IsA(T::StaticClass()));
143 }
144 return (T*)Result;
145 }
146
148 {
149 Ar << Class;
150 }
151
153 {
154 return GetTypeHash(SubclassOf.Class);
155 }
156
157private:
158 FFieldClass* Class = nullptr;
159};
160
161template <typename T>
167
#define check(expr)
Definition AssertionMacros.h:314
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_REQUIRES(...)
Definition Requires.h:86
FArchive & operator<<(FArchive &Ar, TSubclassOfField< T > &SubclassOf)
Definition SubclassOfField.h:162
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
Definition Field.h:66
bool IsChildOf(const FFieldClass *InClass) const
Definition Field.h:157
FField * GetDefaultObject()
Definition Field.h:174
Definition Field.h:556
Definition SubclassOfField.h:29
TSubclassOfField(const TSubclassOfField &)=default
TSubclassOfField & operator=(TSubclassOfField &&)=default
UE_FORCEINLINE_HINT TSubclassOfField(const TSubclassOfField< OtherT > &Other)
Definition SubclassOfField.h:66
TSubclassOfField & operator=(const TSubclassOfField< OtherT > &Other)
Definition SubclassOfField.h:76
UE_FORCEINLINE_HINT FFieldClass * Get() const
Definition SubclassOfField.h:114
TSubclassOfField(TSubclassOfField &&)=default
T * GetDefaultObject() const
Definition SubclassOfField.h:136
UE_FORCEINLINE_HINT FFieldClass * operator->() const
Definition SubclassOfField.h:120
UE_FORCEINLINE_HINT void Serialize(FArchive &Ar)
Definition SubclassOfField.h:147
TSubclassOfField()=default
UE_FORCEINLINE_HINT TSubclassOfField(U &&From)
Definition SubclassOfField.h:56
TSubclassOfField & operator=(U &&From)
Definition SubclassOfField.h:97
~TSubclassOfField()=default
FFieldClass * operator*() const
Definition SubclassOfField.h:104
TSubclassOfField & operator=(const TSubclassOfField &)=default
UE_FORCEINLINE_HINT TSubclassOfField(FFieldClass *From)
Definition SubclassOfField.h:43
TSubclassOfField & operator=(FFieldClass *From)
Definition SubclassOfField.h:83
friend uint32 GetTypeHash(const TSubclassOfField &SubclassOf)
Definition SubclassOfField.h:152
Definition SubclassOfField.h:15
@ Value
Definition SubclassOfField.h:16