UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Invoke.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// Templates for invoking functors
3
4#pragma once
5
9
10namespace uLang
11{
12
13//------------------------------------------------------------------
14// From Invoke.h
15
16namespace Private
17{
18 template <typename BaseType, typename CallableType>
24
25 template <typename BaseType, typename CallableType>
28 {
29 return *(CallableType&&)Callable;
30 }
31}
32
33
46template <typename FuncType, typename... ArgTypes>
47ULANG_FORCEINLINE auto Invoke(FuncType&& Func, ArgTypes&&... Args)
48 -> decltype(uLang::ForwardArg<FuncType>(Func)(uLang::ForwardArg<ArgTypes>(Args)...))
49{
50 return uLang::ForwardArg<FuncType>(Func)(uLang::ForwardArg<ArgTypes>(Args)...);
51}
52
53template <typename ReturnType, typename ObjType, typename CallableType>
54ULANG_FORCEINLINE auto Invoke(ReturnType ObjType::*pdm, CallableType&& Callable)
55 -> decltype(Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*pdm)
56{
57 return Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*pdm;
58}
59
60template <typename ReturnType, typename ObjType, typename... PMFArgTypes, typename CallableType, typename... ArgTypes>
61ULANG_FORCEINLINE auto Invoke(ReturnType (ObjType::*PtrMemFun)(PMFArgTypes...), CallableType&& Callable, ArgTypes&&... Args)
62 -> decltype((Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*PtrMemFun)(uLang::ForwardArg<ArgTypes>(Args)...))
63{
64 return (Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*PtrMemFun)(uLang::ForwardArg<ArgTypes>(Args)...);
65}
66
67template <typename ReturnType, typename ObjType, typename... PMFArgTypes, typename CallableType, typename... ArgTypes>
68ULANG_FORCEINLINE auto Invoke(ReturnType (ObjType::*PtrMemFun)(PMFArgTypes...) const, CallableType&& Callable, ArgTypes&&... Args)
69 -> decltype((Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*PtrMemFun)(uLang::ForwardArg<ArgTypes>(Args)...))
70{
71 return (Private::DereferenceIfNecessary<ObjType>(uLang::ForwardArg<CallableType>(Callable)).*PtrMemFun)(uLang::ForwardArg<ArgTypes>(Args)...);
72}
73
74
89#define ULANG_PROJECTION(FuncName) \
90 [](auto&&... Args) \
91 { \
92 return FuncName(uLang::ForwardArg<decltype(Args)>(Args)...); \
93 }
94
110#define ULANG_PROJECTION_MEMBER(Type, FuncName) \
111 [](auto&& Obj, auto&&... Args) \
112 { \
113 return Private::DereferenceIfNecessary<Type>(uLang::ForwardArg<decltype(Obj)>(Obj)).FuncName(uLang::ForwardArg<decltype(Args)>(Args)...); \
114 }
115
116 //------------------------------------------------------------------
117 // From IsInvocable.h
118
119namespace Private
120{
121 template <typename T>
122 T&& DeclVal();
123
124 template <typename T>
125 struct TVoid
126 {
127 typedef void Type;
128 };
129
130 template <typename, typename CallableType, typename... ArgTypes>
132 {
133 enum { Value = false };
134 };
135
136 template <typename CallableType, typename... ArgTypes>
137 struct TIsInvocableImpl<typename TVoid<decltype(uLang::Invoke(DeclVal<CallableType>(), DeclVal<ArgTypes>()...))>::Type, CallableType, ArgTypes...>
138 {
139 enum { Value = true };
140 };
141}
142
157template <typename CallableType, typename... ArgTypes>
158struct TIsInvocable : Private::TIsInvocableImpl<void, CallableType, ArgTypes...>
159{
160};
161
162}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_FORCEINLINE
Definition Common.h:188
Definition Conditionals.h:95
Definition OverriddenPropertySet.cpp:45
ULANG_FORCEINLINE auto DereferenceIfNecessary(CallableType &&Callable) -> typename TEnableIf< TPointerIsConvertibleFromTo< typename TDecay< CallableType >::Type, typename TDecay< BaseType >::Type >::Value, decltype((CallableType &&) Callable)>::Type
Definition Invoke.h:19
Definition VVMEngineEnvironment.h:23
ULANG_FORCEINLINE auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(uLang::ForwardArg< FuncType >(Func)(uLang::ForwardArg< ArgTypes >(Args)...))
Definition Invoke.h:47
ULANG_FORCEINLINE T && ForwardArg(typename TRemoveReference< T >::Type &Obj)
Definition References.h:115
Definition Invoke.h:132
@ Value
Definition Invoke.h:133
Definition Invoke.h:126
void Type
Definition Invoke.h:127
typename Private::TDecayNonReference< typename TRemoveReference< T >::Type >::Type Type
Definition References.h:60
Definition Invoke.h:159