-
Notifications
You must be signed in to change notification settings - Fork 0
FMessageBody
The local message context: an FGMPExtra plus the helpers a listener-side implementation needs.
Declared in Plugins/GMP/Source/GMP/GMP/GMPStruct.h:500
struct GMP_API FMessageBody : public FGMPExtra
{
template<typename... Ts>
static const FArrayTypeNames& MakeStaticNamesImpl()
{
static FArrayTypeNames Ret{GMP_TYPE_META(Ts)::GetFName()...};
return Ret;
}
template<typename Tup, size_t... Is>
static const FArrayTypeNames& MakeStaticNames(Tup*, const std::index_sequence<Is...>&);
FORCEINLINE auto GetSigSource() const { return Source.TryGetUObject(); }
};
The static type-name table. MakeStaticNamesImpl<Ts...>() builds one FArrayTypeNames per parameter
pack — a function-local static, so it is constructed once and shared by every dispatch of that signature.
This is what FGMPExtra::TypeNames points at, and why carrying type names costs a pointer rather than an
allocation per send.
GetSigSource() narrows the tagged FSigSource back to a UObject*, returning null when the source
is not one. Use this rather than casting the source yourself.
It is the body a listener-side adapter receives. Backends and bridges use it; C++ listeners do not, because the thunk has already decoded the arguments into typed parameters by the time your lambda runs.
GMP · Reference wiki — one page per named thing. Guided introduction: project site · 中文站点 · measured dispatch stack Source: repository · README · README 中文
Pages here are generated from wiki/ in the main repository — edit there, not on the wiki.
Concepts
- Why a string key
- Dispatch layers
- Parameter compatibility
- Signature inference
- Key baking
- Transparent rewrite
- Jump tracing
Sending and listening
- NotifyMessage family
- ListenMessage family
- StoreObjectMessage
- MSGKEY
- FSigSource
- FSigHandle
- FGMPKey
- FGMPResponder
Dispatch internals
Reflection and data
Editor
Build