Michele Caini vor 7 Jahren
Ursprung
Commit
bd21ee318d
1 geänderte Dateien mit 10 neuen und 4 gelöschten Zeilen
  1. 10 4
      src/entt/meta/factory.hpp

+ 10 - 4
src/entt/meta/factory.hpp

@@ -325,11 +325,13 @@ public:
         auto * const type = internal::meta_info<Type>::resolve();
         auto * const type = internal::meta_info<Type>::resolve();
 
 
         if constexpr(std::is_same_v<Type, decltype(Data)>) {
         if constexpr(std::is_same_v<Type, decltype(Data)>) {
+            using owner_type = std::integral_constant<Type, Data>;
+
             static internal::meta_data_node node{
             static internal::meta_data_node node{
                 hashed_string{str},
                 hashed_string{str},
                 type->data,
                 type->data,
                 type,
                 type,
-                properties<std::integral_constant<Type, Data>>(std::forward<Property>(property)...),
+                properties<owner_type>(std::forward<Property>(property)...),
                 true,
                 true,
                 true,
                 true,
                 &internal::meta_info<Type>::resolve,
                 &internal::meta_info<Type>::resolve,
@@ -345,11 +347,13 @@ public:
             internal::meta_info<Type>::template data<Data> = &node;
             internal::meta_info<Type>::template data<Data> = &node;
             type->data = &node;
             type->data = &node;
         } else {
         } else {
+            using owner_type = std::integral_constant<decltype(Data), Data>;
+
             static internal::meta_data_node node{
             static internal::meta_data_node node{
                 hashed_string{str},
                 hashed_string{str},
                 type->data,
                 type->data,
                 type,
                 type,
-                properties<std::integral_constant<decltype(Data), Data>>(std::forward<Property>(property)...),
+                properties<owner_type>(std::forward<Property>(property)...),
                 std::is_const_v<data_type<Data>>,
                 std::is_const_v<data_type<Data>>,
                 !std::is_member_object_pointer_v<decltype(Data)>,
                 !std::is_member_object_pointer_v<decltype(Data)>,
                 &internal::meta_info<data_type<Data>>::resolve,
                 &internal::meta_info<data_type<Data>>::resolve,
@@ -391,6 +395,7 @@ public:
      */
      */
     template<auto Setter, auto Getter, typename... Property>
     template<auto Setter, auto Getter, typename... Property>
     meta_factory data(const char *str, Property &&... property) ENTT_NOEXCEPT {
     meta_factory data(const char *str, Property &&... property) ENTT_NOEXCEPT {
+        using owner_type = std::tuple<std::integral_constant<decltype(Setter), Setter>, std::integral_constant<decltype(Getter), Getter>>;
         using data_type = std::invoke_result_t<decltype(Getter), Type &>;
         using data_type = std::invoke_result_t<decltype(Getter), Type &>;
         static_assert(std::is_invocable_v<decltype(Setter), Type &, data_type>);
         static_assert(std::is_invocable_v<decltype(Setter), Type &, data_type>);
         auto * const type = internal::meta_info<Type>::resolve();
         auto * const type = internal::meta_info<Type>::resolve();
@@ -399,7 +404,7 @@ public:
             hashed_string{str},
             hashed_string{str},
             type->data,
             type->data,
             type,
             type,
-            properties<std::tuple<decltype(Setter), decltype(Getter)>>(std::forward<Property>(property)...),
+            properties<owner_type>(std::forward<Property>(property)...),
             false,
             false,
             false,
             false,
             &internal::meta_info<data_type>::resolve,
             &internal::meta_info<data_type>::resolve,
@@ -434,13 +439,14 @@ public:
      */
      */
     template<auto Func, typename... Property>
     template<auto Func, typename... Property>
     meta_factory func(const char *str, Property &&... property) ENTT_NOEXCEPT {
     meta_factory func(const char *str, Property &&... property) ENTT_NOEXCEPT {
+        using owner_type = std::integral_constant<decltype(Func), Func>;
         auto * const type = internal::meta_info<Type>::resolve();
         auto * const type = internal::meta_info<Type>::resolve();
 
 
         static internal::meta_func_node node{
         static internal::meta_func_node node{
             hashed_string{str},
             hashed_string{str},
             type->func,
             type->func,
             type,
             type,
-            properties<std::integral_constant<decltype(Func), Func>>(std::forward<Property>(property)...),
+            properties<owner_type>(std::forward<Property>(property)...),
             func_type<Func>::size,
             func_type<Func>::size,
             func_type<Func>::is_const,
             func_type<Func>::is_const,
             func_type<Func>::is_static,
             func_type<Func>::is_static,