Grindstone Game Engine
v0.2.0
An open source game engine and toolkit.
Toggle main menu visibility
Loading...
Searching...
No Matches
DefaultResolver.hpp
1
#pragma once
2
3
#include <string>
4
#include "TypeDescriptor.hpp"
5
6
namespace
Grindstone::Reflection {
7
template
<
typename
T>
8
TypeDescriptor
* GetPrimitiveDescriptor();
9
10
struct
DefaultResolver
{
11
template
<
typename
T>
static
char
func(
decltype
(&T::Reflection));
12
template
<
typename
T>
static
int
func(...);
13
template
<
typename
T>
14
struct
IsReflected
{
15
enum
{ value = (
sizeof
(func<T>(
nullptr
)) ==
sizeof
(char)) };
16
};
17
18
// This version is called if T has a static member named "Reflection":
19
template <typename T, typename std::enable_if<IsReflected<T>::value,
int
>::type = 0>
20
static
TypeDescriptor
* Get() {
21
return
&T::Reflection;
22
}
23
24
// This version is called otherwise:
25
template <typename T, typename std::enable_if<!IsReflected<T>::value,
int
>::type = 0>
26
static
TypeDescriptor
* Get() {
27
return
GetPrimitiveDescriptor<T>();
28
}
29
};
30
}
Grindstone::Reflection::DefaultResolver::IsReflected
Definition
DefaultResolver.hpp:14
Grindstone::Reflection::DefaultResolver
Definition
DefaultResolver.hpp:10
Grindstone::Reflection::TypeDescriptor
Definition
TypeDescriptor.hpp:6
sources
code
EngineCore
Reflection
DefaultResolver.hpp
Generated by
1.17.0