Refureku v2.2.0
C++17 runtime reflection library.
GetArchetype.h
1
8#pragma once
9
10#include <type_traits> //std::is_function_v, std::is_member_object_pointer_v, std::is_pointer_v...
11
12#include "Refureku/Config.h"
13#include "Refureku/TypeInfo/Archetypes/Enum.h" //rfk::getEnum
14#include "Refureku/Misc/TypeTraits.h"
15
16#define RFK_DEFINE_GET_ARCHETYPE_TEMPLATE(...) namespace rfk { template <template <__VA_ARGS__> typename> Archetype const* getArchetype() noexcept { return nullptr; } }
17
18namespace rfk
19{
33 template <typename T>
34 Archetype const* getArchetype() noexcept;
35
41 template <template <typename...> typename T>
42 Archetype const* getArchetype() noexcept; //Variadic type template parameters
43
44 template <template <auto...> typename T>
45 Archetype const* getArchetype() noexcept; //Variadic non-type template parameters
46
47#if RFK_TEMPLATE_TEMPLATE_SUPPORT
48 template <template <template <typename...> typename...> typename T>
49 Archetype const* getArchetype() noexcept; //Variadic template template type parameters
50#endif
51
55 template <>
56 REFUREKU_API Archetype const* getArchetype<void>() noexcept;
57
58 template <>
59 REFUREKU_API Archetype const* getArchetype<std::nullptr_t>() noexcept;
60
61 template <>
62 REFUREKU_API Archetype const* getArchetype<bool>() noexcept;
63
64 template <>
65 REFUREKU_API Archetype const* getArchetype<char>() noexcept;
66
67 template <>
68 REFUREKU_API Archetype const* getArchetype<signed char>() noexcept;
69
70 template <>
71 REFUREKU_API Archetype const* getArchetype<unsigned char>() noexcept;
72
73 template <>
74 REFUREKU_API Archetype const* getArchetype<wchar_t>() noexcept;
75
76 template <>
77 REFUREKU_API Archetype const* getArchetype<char16_t>() noexcept;
78
79 template <>
80 REFUREKU_API Archetype const* getArchetype<char32_t>() noexcept;
81
82 template <>
83 REFUREKU_API Archetype const* getArchetype<short>() noexcept;
84
85 template <>
86 REFUREKU_API Archetype const* getArchetype<unsigned short>() noexcept;
87
88 template <>
89 REFUREKU_API Archetype const* getArchetype<int>() noexcept;
90
91 template <>
92 REFUREKU_API Archetype const* getArchetype<unsigned int>() noexcept;
93
94 template <>
95 REFUREKU_API Archetype const* getArchetype<long>() noexcept;
96
97 template <>
98 REFUREKU_API Archetype const* getArchetype<unsigned long>() noexcept;
99
100 template <>
101 REFUREKU_API Archetype const* getArchetype<long long>() noexcept;
102
103 template <>
104 REFUREKU_API Archetype const* getArchetype<unsigned long long>() noexcept;
105
106 template <>
107 REFUREKU_API Archetype const* getArchetype<float>() noexcept;
108
109 template <>
110 REFUREKU_API Archetype const* getArchetype<double>() noexcept;
111
112 template <>
113 REFUREKU_API Archetype const* getArchetype<long double>() noexcept;
114
115 #include "Refureku/TypeInfo/Archetypes/GetArchetype.inl"
116}
Definition: Archetype.h:16
Definition: Allocator.h:16
REFUREKU_API Archetype const * getArchetype< void >() noexcept
Archetype const * getArchetype() noexcept
Get the archetype of any type if it exists. Note that this method will always return nullptr on prote...