@@ -522,7 +522,7 @@ inline constexpr auto MemberNameOf = []() constexpr {
522
522
}();
523
523
524
524
template <class T >
525
- constexpr auto TypeName = [] {
525
+ constexpr auto TypeNameOf = [] {
526
526
constexpr std::string_view name = detail::MangledName<T>();
527
527
constexpr auto begin = name.find (detail::reflect_type::end);
528
528
constexpr auto tmp = name.substr (0 , begin);
@@ -589,7 +589,7 @@ namespace detail
589
589
consteval std::string_view func_name_msvc ()
590
590
{
591
591
std::string_view str = REFLECTION_PRETTY_FUNCTION;
592
- str = str.substr (str.rfind (TypeName <T>) + TypeName <T>.size ());
592
+ str = str.substr (str.rfind (TypeNameOf <T>) + TypeNameOf <T>.size ());
593
593
str = str.substr (str.find (" ::" ) + 2 );
594
594
return str.substr (0 , str.find (' (' ));
595
595
}
@@ -604,11 +604,9 @@ namespace detail
604
604
template <typename ... Ts, typename F>
605
605
constexpr void enumerate_types (F&& f)
606
606
{
607
- [&f]<auto ... Is>(std::index_sequence<Is...>)
608
- {
607
+ [&f]<auto ... Is>(std::index_sequence<Is...>) {
609
608
(f.template operator ()<Ts, Is>(), ...);
610
- }
611
- (std::index_sequence_for<Ts...> {});
609
+ }(std::index_sequence_for<Ts...> {});
612
610
}
613
611
614
612
template <auto ... Xs, typename F>
@@ -627,67 +625,71 @@ constexpr void template_for(F&& f)
627
625
{
628
626
using t = std::common_type_t <decltype (B), decltype (E)>;
629
627
630
- [&f]<auto ... Xs>(std::integer_sequence<t, Xs...>)
631
- {
628
+ [&f]<auto ... Xs>(std::integer_sequence<t, Xs...>) {
632
629
detail::for_values<(B + Xs)...>(f);
633
- }
634
- (std::make_integer_sequence<t, E - B> {});
630
+ }(std::make_integer_sequence<t, E - B> {});
635
631
}
636
632
637
633
template <typename ElementMask, typename F>
638
634
constexpr void template_for (F&& f)
639
635
{
640
636
using t = typename ElementMask::value_type;
641
- [&f]<auto ... Xs>(std::integer_sequence<t, Xs...>)
642
- {
637
+ [&f]<auto ... Xs>(std::integer_sequence<t, Xs...>) {
643
638
Reflection::detail::for_values<(Xs)...>(f);
644
- }
645
- (ElementMask {});
639
+ }(ElementMask {});
646
640
}
647
641
648
- template <auto P>
649
- requires (std::is_member_pointer_v<decltype (P)>)
650
- consteval std::string_view GetName ()
642
+ namespace detail
651
643
{
652
- #if defined(_MSC_VER) && !defined(__clang__)
653
- if constexpr (std::is_member_object_pointer_v<decltype (P)>)
654
- {
655
- using T = detail::remove_member_pointer<std::decay_t <decltype (P)>>::type;
656
- constexpr auto p = P;
657
- return detail::get_name_msvc<T, &(detail::External<T>.*p)>();
658
- }
659
- else
644
+
645
+ template <auto P>
646
+ requires (std::is_member_pointer_v<decltype (P)>)
647
+ consteval std::string_view GetName ()
660
648
{
661
- using T = detail::remove_member_pointer<std::decay_t <decltype (P)>>::type;
662
- return detail::func_name_msvc<T, P>();
663
- }
649
+ #if defined(_MSC_VER) && !defined(__clang__)
650
+ if constexpr (std::is_member_object_pointer_v<decltype (P)>)
651
+ {
652
+ using T = detail::remove_member_pointer<std::decay_t <decltype (P)>>::type;
653
+ constexpr auto p = P;
654
+ return detail::get_name_msvc<T, &(detail::External<T>.*p)>();
655
+ }
656
+ else
657
+ {
658
+ using T = detail::remove_member_pointer<std::decay_t <decltype (P)>>::type;
659
+ return detail::func_name_msvc<T, P>();
660
+ }
664
661
#else
665
- // TODO: Use std::source_location when deprecating clang 14
666
- // std::string_view str = std::source_location::current().function_name();
667
- std::string_view str = REFLECTION_PRETTY_FUNCTION;
668
- str = str.substr (str.find (' &' ) + 1 );
669
- str = str.substr (0 , str.find (detail::pretty_function_tail));
670
- return str.substr (str.rfind (" ::" ) + 2 );
662
+ // TODO: Use std::source_location when deprecating clang 14
663
+ // std::string_view str = std::source_location::current().function_name();
664
+ std::string_view str = REFLECTION_PRETTY_FUNCTION;
665
+ str = str.substr (str.find (' &' ) + 1 );
666
+ str = str.substr (0 , str.find (detail::pretty_function_tail));
667
+ return str.substr (str.rfind (" ::" ) + 2 );
671
668
#endif
672
- }
669
+ }
673
670
674
- template <auto E>
675
- requires (std::is_enum_v<decltype (E)>)
676
- consteval auto GetName ()
677
- {
671
+ template <auto E>
672
+ requires (std::is_enum_v<decltype (E)>)
673
+ consteval auto GetName ()
674
+ {
678
675
#if defined(_MSC_VER) && !defined(__clang__)
679
- std::string_view str = REFLECTION_PRETTY_FUNCTION;
680
- str = str.substr (str.rfind (" ::" ) + 2 );
681
- str = str.substr (0 , str.find (' >' ));
682
- return str.substr (str.find (' <' ) + 1 );
676
+ std::string_view str = REFLECTION_PRETTY_FUNCTION;
677
+ str = str.substr (str.rfind (" ::" ) + 2 );
678
+ str = str.substr (0 , str.find (' >' ));
679
+ return str.substr (str.find (' <' ) + 1 );
683
680
#else
684
- constexpr auto MarkerStart = std::string_view { " E = " };
685
- std::string_view str = REFLECTION_PRETTY_FUNCTION;
686
- str = str.substr (str.rfind (MarkerStart) + MarkerStart.size ());
687
- str = str.substr (0 , str.find (' ]' ));
688
- return str;
681
+ constexpr auto MarkerStart = std::string_view { " E = " };
682
+ std::string_view str = REFLECTION_PRETTY_FUNCTION;
683
+ str = str.substr (str.rfind (MarkerStart) + MarkerStart.size ());
684
+ str = str.substr (0 , str.find (' ]' ));
685
+ return str;
689
686
#endif
690
- }
687
+ }
688
+ } // namespace detail
689
+
690
+ // / Gets the name of a member or function pointer
691
+ template <auto V>
692
+ constexpr std::string_view NameOf = detail::GetName<V>();
691
693
692
694
// / Calls a callable on members of an object specified with ElementMask sequence with the index of the member as the
693
695
// / first argument. and the member's default-constructed value as the second argument.
@@ -730,8 +732,7 @@ template <typename Object, typename Callable>
730
732
requires std::same_as<void , std::invoke_result_t <Callable, std::string, MemberTypeOf<0 , Object>>>
731
733
void CallOnMembers (Object& object, Callable&& callable)
732
734
{
733
- EnumerateMembers (object,
734
- [&]<size_t I, typename T>(T&& value) { callable (MemberNameOf<I, Object>, value); });
735
+ EnumerateMembers (object, [&]<size_t I, typename T>(T&& value) { callable (MemberNameOf<I, Object>, value); });
735
736
}
736
737
737
738
// / Folds over the members of a type without an object of it.
0 commit comments