UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypedElementQueryContract.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
8{
9 namespace Private
10 {
11 template<template<typename> typename Base, template<typename> typename... Bases>
12 struct IContextContractCombinerImpl : Base<IContextContractCombinerImpl<Bases>...>
13 {
14 virtual ~IContextContractCombinerImpl() override = default;
15 };
16
17 template<template<typename> typename Base>
18 struct IContextContractCombinerImpl<Base> : Base<IContextCapability>
19 {
20 virtual ~IContextContractCombinerImpl() override = default;
21 };
22
23 template<template<typename> typename... Bases>
25 {
26 virtual ~IContextContractCombiner() override = default;
27
28 private:
29 // Work around for MSVC struggling to correctly expand fold expressions when providing the implementation for a template with
30 // templated types.
31 template<typename Implementation, template<typename> typename Base>
32 constexpr static bool ImplementsCapability()
33 {
34 return std::is_base_of_v<Base<IContextCapability>, Implementation>;
35 }
36
37 template<typename Implementation, template<typename> typename Base>
38 static bool ImplementsCapability(const FName& Capability)
39 {
40 return ImplementsCapability<Implementation, Base>() && Base<IContextCapability>::Name == Capability;
41 }
42
43 public:
44 template<typename Implementation>
45 static bool SupportsCapability(const FName& Capability)
46 {
47 return (ImplementsCapability<Implementation, Bases>(Capability) || ...);
48 }
49
50 template<typename Implementation>
52 {
53 return 0 + ((ImplementsCapability<Implementation, Bases>() ? 1 : 0) + ...);
54 }
55
56 template<typename Implementation>
58 {
59 static TConstArrayView<FName> Result = []()
60 {
62 static FName Capabilities[CapabilityCount] = {};
63
64 int32 Index = 0;
65 (
66 [&]
67 {
69 {
70 Capabilities[Index++] = Bases<IContextCapability>::Name;
71 }
72 }(), ...);
73
74 return TConstArrayView<FName>(Capabilities, CapabilityCount);
75 }();
76 return Result;
77 }
78 };
79
80 //Used to remove the first template argument as that's a placeholder to allow the X-macros to work with the template.
81 template<typename, template<typename> typename... Bases>
83 {
84 virtual ~IPreContextContractCombiner() override = default;
85 };
86} // namespace Private
87
88#define Function0(Capability, Return, Function)
89#define Function1(Capability, Return, Function, Arg1)
90#define Function2(Capability, Return, Function, Arg1, Arg2)
91#define Function3(Capability, Return, Function, Arg1, Arg2, Arg3)
92#define Function4(Capability, Return, Function, Arg1, Arg2, Arg3, Arg4)
93#define ConstFunction0(Capability, Return, Function)
94#define ConstFunction1(Capability, Return, Function, Arg1)
95#define ConstFunction2(Capability, Return, Function, Arg1, Arg2)
96#define ConstFunction3(Capability, Return, Function, Arg1, Arg2, Arg3)
97#define ConstFunction4(Capability, Return, Function, Arg1, Arg2, Arg3, Arg4)
98
99#define CapabilityStart(Capability, Flags) , I##Capability
100#define CapabilityEnd(Capability)
101
111#include "Elements/Framework/TypedElementQueryCapabilities.inl"
112 >
113 {
114 virtual ~IContextContract() override = default;
115 };
116
117#undef Function0
118#undef Function1
119#undef Function2
120#undef Function3
121#undef Function4
122#undef ConstFunction0
123#undef ConstFunction1
124#undef ConstFunction2
125#undef ConstFunction3
126#undef ConstFunction4
127#undef CapabilityStart
128#undef CapabilityEnd
129} // namespace UE::Editor::DataStorage::Queries
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition NameTypes.h:617
Definition OverriddenPropertySet.cpp:45
Definition Conditions.cpp:11
U16 Index
Definition radfft.cpp:71
Definition TypedElementQueryContract.h:113
static bool SupportsCapability(const FName &Capability)
Definition TypedElementQueryContract.h:45
static TConstArrayView< FName > SupportedCapabilitiesList()
Definition TypedElementQueryContract.h:57
static constexpr int32 CountSupportedCapabilities()
Definition TypedElementQueryContract.h:51