فهرست منبع

meta: internal changes

skypjack 5 ماه پیش
والد
کامیت
7d2b4fcf57
2فایلهای تغییر یافته به همراه7 افزوده شده و 3 حذف شده
  1. 1 0
      TODO
  2. 6 3
      src/entt/meta/meta.hpp

+ 1 - 0
TODO

@@ -33,3 +33,4 @@ TODO:
 * paged vector as a standalone class
 * resource: shared_from_this?
 * change meta_any::base name, it's confusing due to meta_base_node and base types in meta
+* delay meta_handle/meta_any creation as long as possible when setting/getting/invoking

+ 6 - 3
src/entt/meta/meta.hpp

@@ -518,9 +518,12 @@ public:
     template<typename Type, typename... Args>
     void emplace(Args &&...args) {
         storage.emplace<Type>(std::forward<Args>(args)...);
-        resolve = internal::resolve<std::remove_cv_t<std::remove_reference_t<Type>>>;
-        lazy_node = internal::meta_type_node{};
-        vtable = &basic_vtable<std::remove_cv_t<std::remove_reference_t<Type>>>;
+
+        if(auto *overload = internal::resolve<std::remove_cv_t<std::remove_reference_t<Type>>>; overload != resolve) {
+            resolve = overload;
+            lazy_node = internal::meta_type_node{};
+            vtable = &basic_vtable<std::remove_cv_t<std::remove_reference_t<Type>>>;
+        }
     }
 
     /*! @copydoc any::assign */