CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Type.define.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel.
5// Copyright (c) 2018-2023 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Type.hpp"
11#include "TypeInfo.hpp"
12#include "TypeInfo.core.hpp"
13#include "TypeInfo.std.hpp"
14
15namespace CeresEngine {
16
17 template<typename From, typename To, typename Converter = void> struct TypeConversionAutoRegistration final {
18 const Converter& converter;
19 CE_EXPLICIT_FALSE TypeConversionAutoRegistration(Converter&& converter) : converter(std::move(converter)) { Type::registerConverter<From, To>(this->converter); }
20 ~TypeConversionAutoRegistration() { Type::unregisterConverter<From, To>(); }
21 };
22
23 template<typename From, typename To> struct TypeConversionAutoRegistration<From, To, void> final {
24 TypeConversionAutoRegistration() { Type::registerConverter<From, To>(); }
25 ~TypeConversionAutoRegistration() { Type::unregisterConverter<From, To>(); }
26 };
27
28 #define CE_META_TYPE_CONVERSION_NAME(From, To) CE_META_CONCAT(TypeConversionAutoRegistration, __COUNTER__)
29 #define CE_META_TYPE_CONVERSION(From, To) \
30 static const ::CeresEngine::TypeConversionAutoRegistration<From, To> CE_META_TYPE_CONVERSION_NAME(From, To)
31 #define CE_META_TYPE_CONVERSION_FN(From, To) \
32 static const ::CeresEngine::TypeConversionAutoRegistration<From, To, To(*)(const From&)> CE_META_TYPE_CONVERSION_NAME(From, To) = +[](const From& value) -> To
33
34 #define CE_META_TYPE_CONVERSION_EXPR(From, To, ...) \
35 CE_META_TYPE_CONVERSION_FN(From, To) { return __VA_ARGS__; }
36
37}
#define CE_EXPLICIT_FALSE
Definition Macros.hpp:416
Definition Application.hpp:19
auto move(Vector3 position)
Moves a entity to the given position.
Definition Helpers.hpp:22
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668
Definition Type.define.hpp:17
TypeConversionAutoRegistration(Converter &&converter)
Definition Type.define.hpp:19
~TypeConversionAutoRegistration()
Definition Type.define.hpp:20
const Converter & converter
Definition Type.define.hpp:18