Go to the documentation of this file.
9 #ifndef EAGINE_REFLECT_MAP_DATA_MEMBERS_HPP
10 #define EAGINE_REFLECT_MAP_DATA_MEMBERS_HPP
12 #include "../selector.hpp"
13 #include "../string_span.hpp"
15 #include <type_traits>
20 template <
typename C,
typename... M>
22 make_data_member_mapping(std::pair<string_view, M C::*>... m) noexcept {
23 return std::make_tuple(m...);
26 template <
typename T,
typename Selector>
27 struct does_have_data_member_mapping {
31 typename = decltype(data_member_mapping(type_identity<X>(), Selector()))>
32 static auto _test(X*) -> std::true_type;
33 static auto _test(...) -> std::false_type;
37 using type = decltype(_test(
static_cast<std::remove_cv_t<T>*
>(
nullptr)));
40 template <
typename T,
typename Selector = default_selector_t>
41 using has_data_member_mapping_t =
42 typename does_have_data_member_mapping<T, Selector>::type;
44 template <
typename T,
typename Selector = default_selector_t>
45 constexpr
const bool has_data_member_mapping_v =
46 has_data_member_mapping_t<T, Selector>::value;
50 #endif // EAGINE_REFLECT_MAP_DATA_MEMBERS_HPP
Common code is placed in this namespace.
Definition: eagine.hpp:21