Преглед изворни кода

view: const correctness for constructor arguments

Michele Caini пре 5 година
родитељ
комит
350884c627
2 измењених фајлова са 5 додато и 6 уклоњено
  1. 4 4
      src/entt/entity/registry.hpp
  2. 1 2
      src/entt/entity/view.hpp

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

@@ -1295,16 +1295,16 @@ public:
      * @return A newly created view.
      */
     template<typename... Component, typename... Exclude>
-    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) {
+    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) const {
         static_assert(sizeof...(Component) > 0);
         return { assure<std::decay_t<Component>>()..., assure<Exclude>()... };
     }
 
     /*! @copydoc view */
     template<typename... Component, typename... Exclude>
-    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) const {
-        static_assert(std::conjunction_v<std::is_const<Component>...>);
-        return const_cast<basic_registry *>(this)->view<Component...>(exclude<Exclude...>);
+    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) {
+        static_assert(sizeof...(Component) > 0);
+        return { assure<std::decay_t<Component>>()..., assure<Exclude>()... };
     }
 
     /**

+ 1 - 2
src/entt/entity/view.hpp

@@ -149,8 +149,7 @@ class basic_view<Entity, exclude_t<Exclude...>, Component...> {
         underlying_iterator it;
     };
 
-    // we could use pool_type<Component> &..., but vs complains about it and refuses to compile for unknown reasons (likely a bug)
-    basic_view(storage<Entity, std::remove_const_t<Component>> &... component, storage<Entity, std::remove_const_t<Exclude>> &... epool) ENTT_NOEXCEPT
+    basic_view(pool_type<Component> &... component, pool_type<Exclude> &... epool) ENTT_NOEXCEPT
         : pools{&component..., &epool...}
     {}