Przeglądaj źródła

registry: add support for non-existent pools to try_get

Michele Caini 3 lat temu
rodzic
commit
34f6a747a8
1 zmienionych plików z 4 dodań i 3 usunięć
  1. 4 3
      src/entt/entity/registry.hpp

+ 4 - 3
src/entt/entity/registry.hpp

@@ -1048,8 +1048,8 @@ public:
     template<typename... Type>
     [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entt) const {
         if constexpr(sizeof...(Type) == 1u) {
-            const auto &cpool = assure<std::remove_const_t<Type>...>();
-            return cpool->contains(entt) ? std::addressof(cpool->get(entt)) : nullptr;
+            const auto *cpool = assure<std::remove_const_t<Type>...>();
+            return (cpool && cpool->contains(entt)) ? std::addressof(cpool->get(entt)) : nullptr;
         } else {
             return std::make_tuple(try_get<Type>(entt)...);
         }
@@ -1059,7 +1059,8 @@ public:
     template<typename... Type>
     [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entt) {
         if constexpr(sizeof...(Type) == 1u) {
-            return (const_cast<Type *>(std::as_const(*this).template try_get<Type>(entt)), ...);
+            auto &cpool = assure<std::remove_const_t<Type>...>();
+            return (static_cast<Type *>(cpool.contains(entt) ? std::addressof(cpool.get(entt)) : nullptr), ...);
         } else {
             return std::make_tuple(try_get<Type>(entt)...);
         }