registry: lazily/partially initialize views in the ::view const function

This commit is contained in:
Michele Caini
2023-05-02 14:39:06 +02:00
parent 34f6a747a8
commit dcb5aed901

View File

@@ -1195,7 +1195,10 @@ public:
template<typename Type, typename... Other, typename... Exclude>
[[nodiscard]] basic_view<get_t<storage_for_type<const Type>, storage_for_type<const Other>...>, exclude_t<storage_for_type<const Exclude>...>>
view(exclude_t<Exclude...> = exclude_t{}) const {
return {*assure<std::remove_const_t<Type>>(), *assure<std::remove_const_t<Other>>()..., *assure<std::remove_const_t<Exclude>>()...};
const auto cpools = std::make_tuple(assure<std::remove_const_t<Type>>(), assure<std::remove_const_t<Other>>()..., assure<std::remove_const_t<Exclude>>()...);
basic_view<get_t<storage_for_type<const Type>, storage_for_type<const Other>...>, exclude_t<storage_for_type<const Exclude>...>> elem{};
std::apply([&elem](const auto *...curr) { ((curr ? elem.storage(*curr) : void()), ...); }, cpools);
return elem;
}
/*! @copydoc view */