Ver código fonte

meta: minor changes

skypjack 3 meses atrás
pai
commit
03bf0f90b4
1 arquivos alterados com 11 adições e 15 exclusões
  1. 11 15
      src/entt/meta/meta.hpp

+ 11 - 15
src/entt/meta/meta.hpp

@@ -209,6 +209,12 @@ class meta_any {
         return *node;
     }
 
+    meta_any(const meta_any &other, any elem)
+        : storage{std::move(elem)},
+          ctx{other.ctx},
+          node{other.node},
+          vtable{other.vtable} {}
+
 public:
     /*! Default constructor. */
     meta_any() = default;
@@ -261,10 +267,8 @@ public:
     template<typename Type>
     explicit meta_any(const meta_ctx &area, std::in_place_t, Type *value)
         : storage{std::in_place, value},
-          ctx{&area} {
-        if(storage) {
-            vtable = &basic_vtable<Type>;
-        }
+          ctx{&area},
+          vtable{storage ? &basic_vtable<Type> : nullptr} {
     }
 
     /**
@@ -605,20 +609,12 @@ public:
 
     /*! @copydoc any::as_ref */
     [[nodiscard]] meta_any as_ref() noexcept {
-        meta_any other{meta_ctx_arg, *ctx};
-        other.storage = storage.as_ref();
-        other.node = node;
-        other.vtable = vtable;
-        return other;
+        return meta_any{*this, storage.as_ref()};
     }
 
     /*! @copydoc any::as_ref */
     [[nodiscard]] meta_any as_ref() const noexcept {
-        meta_any other{meta_ctx_arg, *ctx};
-        other.storage = storage.as_ref();
-        other.node = node;
-        other.vtable = vtable;
-        return other;
+        return meta_any{*this, storage.as_ref()};
     }
 
     /**
@@ -781,7 +777,7 @@ struct meta_custom {
      */
     template<typename Type>
     [[nodiscard]] operator Type &() const noexcept {
-        ENTT_ASSERT((node != nullptr) && (type_hash<std::remove_const_t<Type>>::value() == node->type), "Invalid type");
+        ENTT_ASSERT(static_cast<Type *>(*this) != nullptr, "Invalid type");
         return *static_cast<Type *>(node->value.get());
     }