14#include "CoreMinimal.h"
25 template <CSharedOrWeak T>
29 template <CSharedOrWeak T>
33 template <CSharedOrWeak T>
45 template <
typename T,
typename... Args>
48 object.Initialize(
FWD(args)...);
62 template <
typename T, ESPMode Mode = ESPMode::ThreadSafe,
typename... Args>
66 TSharedRef<T, Mode> result = MakeShareable(newObject);
67 result->Initialize(
FWD(args)...);
93 CFunctorObject Initializer,
95 ESPMode Mode = ESPMode::ThreadSafe,
97 typename Result = std::decay_t<ResultArg>
99 requires std::is_lvalue_reference_v<ResultArg>
103 return MakeShareable(
104 ConstructNew(
FWD(init),
FWD(args)...)
114 template <CRefCounted T, ESPMode Mode = ESPMode::ThreadSafe>
119 return MakeShareable(
object, [](T*
object) {
object->Release(); });
131 ESPMode Mode =
decltype(DeclVal<T const>().AsShared())::Mode
133 auto WeakSelf(
const T* self) -> TWeakPtr<T const, Mode>
135 return StaticCastSharedRef<std::decay_t<T>
const>(self->AsShared());
147 ESPMode Mode =
decltype(DeclVal<T>().AsShared())::Mode
151 return StaticCastSharedRef<std::decay_t<T>>(self->AsShared());
157 ESPMode Mode =
decltype(DeclVal<T const>().AsShared())::Mode
161 return StaticCastSharedRef<std::decay_t<T>
const>(self->AsShared());
167 ESPMode Mode =
decltype(DeclVal<T>().AsShared())::Mode
171 return StaticCastSharedRef<std::decay_t<T>>(self->AsShared());
188 template <CDefaultInitializable T>
194 template <CDefaultInitializable T>
197 template <CDefaultInitializable T>
200 template <CDefaultInitializable T>
206 return MakeShared<TSharedStorage<FDelegateHandle>>();
#define FWD(...)
Shorten forwarding expression with this macro so one may not need to specify explicit type.
Concept describing an object which provides a deferred initializer for shared objects.
typename TFunctionTraits< std::decay_t< T > >::template Arg< I > TFunction_Arg
Shorthand for getting a type of a function argument at given position I.
Utilities for TSharedPtr/Ref and related.
TSharedRef< T, Mode > MakeShareableInit(T *newObject, Args &&... args)
A wrapper around MakeShareable that automatically calls an initializer method Initialize on the insta...
auto SharedSelf(const T *self) -> TSharedRef< T const, Mode >
Same as SharedThis(this) in TSharedFromThis.
TSharedRef< typename T::ElementType, T::Mode > TSharedRefFrom
Copy thread-safety from other shared object type.
TSharedPtr< typename T::ElementType, T::Mode > TSharedPtrFrom
Copy thread-safety from other shared object type.
TSharedRef< TSharedStorage< T > > TSharedStorageRef
TWeakPtr< typename T::ElementType, T::Mode > TWeakPtrFrom
Copy thread-safety from other shared object type.
FORCEINLINE TSharedStorageRef< FDelegateHandle > MakeSharedDelegateHandle()
A simple convenience wrapper around making FDelegateHandles shared.
TSharedRef< T, Mode > ShareRefCounted(T *object)
Create a shared pointer which takes in an object with in-place refcounting.
auto WeakSelf(const T *self) -> TWeakPtr< T const, Mode >
Same as SharedThis(this) in TSharedFromThis but returning a weak pointer instead.
TWeakPtr< TSharedStorage< T > > TSharedStorageWeakPtr
TSharedRef< Result, Mode > ConstructShared(Initializer &&init, Args &&... args)
A combination of MakeShareable and Mcro::Construct::ConstructNew.
TSharedPtr< TSharedStorage< T > > TSharedStoragePtr
A simple mutable shared storage of any value.