39 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) 40 #error "Only <final/final.h> can be included directly." 45 #include "final/util/fstring.h" 59 enum class IsArray { No, Yes };
60 enum class IsFunction { No, Yes };
64 , IsArray is_array = std::is_array<T>::value
67 , IsFunction is_function = std::is_function<T>::value
85 using type = std::remove_extent_t<T>*;
93 using type = std::add_pointer_t<T>;
103 template <
typename T>
107 using remove_ref = std::remove_reference_t<T>;
111 using type = internal::cleanCondition_t<remove_ref>;
115 template <
typename T>
116 using clean_fdata_t =
typename cleanFData<T>::type;
119 template <
typename T>
140 virtual auto getClassName()
const ->
FString 142 return "FDataAccess";
146 constexpr
auto get() -> clean_fdata_t<T>&
154 constexpr
void set (V&& data)
156 static_cast<FData<T>&
>(*this).set(std::forward<V>(data));
165 template <
typename T>
169 using T_nocv = std::remove_cv_t<T>;
172 explicit FData (T& v)
176 explicit FData (T&& v)
177 : value{std::move(v)}
181 ~
FData() noexcept
override =
default;
185 , value_ref{d.isInitializedCopy() ? std::ref(value) : d.value_ref}
189 : value{std::move(d.value)}
190 , value_ref{d.isInitializedCopy() ? std::ref(value) : std::move(d.value_ref)}
200 if ( d.isInitializedCopy() )
203 value_ref = d.value_ref;
209 auto operator = (
FData&& d) noexcept ->
FData&
213 value = std::move(d.value);
215 if ( d.isInitializedCopy() )
218 value_ref = std::move(d.value_ref);
224 constexpr
auto operator () ()
const -> T
229 constexpr
explicit operator T ()
const 234 constexpr
auto operator << (
const T& v) ->
FData&
241 auto getClassName()
const ->
FString override 246 constexpr
auto get()
const -> T&
252 constexpr
void set (
const T& v)
258 constexpr
auto isInitializedCopy()
const ->
bool 260 const auto* v =
reinterpret_cast<void*
>(
const_cast<T_nocv*
>(&value));
261 const auto* r =
reinterpret_cast<void*
>(
const_cast<T_nocv*
>(&value_ref.get()));
265 constexpr
auto isInitializedReference()
const ->
bool 267 return ! isInitializedCopy();
271 constexpr
friend auto operator << (std::ostream &os,
const FData& data) -> std::ostream&
273 os << data.value_ref.get();
280 std::reference_wrapper<T> value_ref;
Definition: class_template.cpp:25