16#include "CoreMinimal.h"
29 template <
typename ReturnIn,
typename... Args>
46 using Arg =
typename TTupleElement<I, Arguments>::Type;
49 using ArgDecay =
typename TTupleElement<I, ArgumentsDecay>::Type;
71 template <CFunctorObject T>
82 template <
typename ClassIn,
typename ReturnIn,
typename... Args>
94 template <
typename ClassIn,
typename ReturnIn,
typename... Args>
106 template <
typename ReturnIn,
typename... Args>
109 static constexpr bool IsFunction =
true;
110 static constexpr bool IsPointer =
true;
111 static constexpr bool IsFunctor =
false;
112 static constexpr bool IsMember =
false;
113 static constexpr bool IsConst =
false;
117 template <
typename ReturnIn,
typename... Args>
129 template <
typename T>
133 template <
typename T,
int I>
137 template <
typename T,
int I>
140 template <
typename T>
143 template <
typename T>
146 template <
typename T>
149 template <
typename T>
152 template <
typename T>
155 template <
typename T>
159 template <
typename T>
162 template <
typename T>
165 template <
typename Class,
typename Function>
167 && (CDerivedFrom<Class, TFunction_Class<Function>> || CSameAs<Class, TFunction_Class<Function>>)
170 template <
typename Return,
typename Tuple,
size_t... Indices>
173 template <
typename Return,
typename Tuple>
176 template <
size_t... Indices>
179 using Type = std::remove_pointer_t<
decltype(
180 Compose(std::make_index_sequence<TTupleArity<Tuple>::Value>{})
184 template <
typename Return,
typename Tuple>
187 template <
typename Return,
typename DstFunction>
190 template <
typename SrcFunction,
typename DstFunction>
195 template<
typename Function,
size_t... Sequence>
199 std::index_sequence<Sequence...>&&
205 template<
typename Object,
typename Function,
size_t... Sequence>
210 std::index_sequence<Sequence...>&&
213 return (object->*function)(Forward<TFunction_Arg<Function, Sequence>>(arguments.template Get<Sequence>())...);
221 template<
typename Function>
225 Forward<Function>(function), arguments,
234 template<CFunctionPtr Function, CHasFunction<Function> Object>
239 Forward<Function>(function), arguments,
TFunction_Return< Function > InvokeWithTuple_Impl(Function &&function, TFunction_Arguments< Function > const &arguments, std::index_sequence< Sequence... > &&)
typename TFunctionTraits< std::decay_t< T > >::template Arg< I > TFunction_Arg
constexpr bool TFunction_IsConst
typename TFunctionTraits< std::decay_t< T > >::Return TFunction_Return
constexpr size_t TFunction_ArgCount
TFunction_Return< Function > InvokeWithTuple(Function &&function, TFunction_Arguments< Function > const &arguments)
typename TFunctionFromTuple_Struct< std::decay_t< Return >, std::decay_t< Tuple > >::Type TFunctionFromTuple
typename TFunctionTraits< std::decay_t< T > >::Class TFunction_Class
typename TFunctionTraits< std::decay_t< T > >::Signature TFunction_Signature
typename TFunctionTraits< std::decay_t< T > >::template ArgDecay< I > TFunction_ArgDecay
Return(typename TTupleElement< Indices, Tuple >::Type...) TFunctionFromTupleIndices
TSetReturn< TFunction_Return< SrcFunction >, DstFunction > TCopyReturn
constexpr bool TFunction_IsMember
TFunctionFromTuple< Return, TFunction_Arguments< DstFunction > > TSetReturn
typename TFunctionTraits< std::decay_t< T > >::Arguments TFunction_Arguments
static consteval TFunctionFromTupleIndices< Return, Tuple, Indices... > * Compose(std::index_sequence< Indices... > &&)
std::remove_pointer_t< decltype( Compose(std::make_index_sequence< TTupleArity< Tuple >::Value >{}))> Type
static constexpr bool IsMember
static constexpr bool IsFunctor
static constexpr bool IsConst
static constexpr size_t ArgumentCount
static constexpr bool IsFunction
static constexpr bool IsPointer