Non-propagating cache (C++20)
|
template
<
class T >
requires std::is_object_v<T> |
(since C++20)
(exposition only*) |
|
Some range adaptors such as ranges::join_view and ranges::lazy_split_view conditionally store value (e.g. an iterator) which is specified in terms of an exposition-only class template non-propagating-cache
The wrapper behaves exactly like std::optional<T>
- it does not copy the value of the source when it is copy constructed or assigned to,
- it resets the value of the source when it is moved-from,
- it resets its value when it is assigned from, and
- it additionally provides a member function template to enable an input view to temporarily cache values as it is iterated over.
The wrapper encapsulates a cache containing a value. Clearing cache is an operation equivalent to resetting a contained value. Such operation is performed when copying or moving a wrapper.
Template parameters
| T | - | the type of the contained value, must be an object type |
Member functions
Copy and move constructors
|
constexpr
/*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { } |
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other.reset ( ) ; } |
(2) | (since C++20) |
Copy and move assignment operators
|
constexpr
/*non-propagating-cache*/
&
operator=
(
const
/*non-propagating-cache*/
& other )
noexcept
|
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
&
operator=
(
/*non-propagating-cache*/
&& other )
noexcept
|
(2) | (since C++20) |
non-propagating-cache<T>::emplace-deref
|
template
<
class I >
constexpr T& /*emplace-deref*/ ( const I& i ) ; |
(since C++20)
(exposition only*) |
|
Initializes the contained value by direct-initializing (but not direct-list-initializing) with *i. If *this already contains a value before the call, reset()
Returns a reference to the new contained value.
The program is ill-formed unless the declaration T t(*i); is well-formed for some invented variable t. If *i is a prvalue of possibly cv-qualified T
Members identical to std::optional
Member functions
constructs the optional object (public member function of std::optional<T>) |
|
| destroys the contained value, if there is one (public member function of std::optional<T>) |
|
| assigns contents (public member function of std::optional<T>) |
|
Observers | |
| accesses the contained value (public member function of std::optional<T>) |
|
| checks whether the object contains a value (public member function of std::optional<T>) |
|
Modifiers | |
| destroys any contained value (public member function of std::optional<T>) |
|
| constructs the contained value in-place (public member function of std::optional<T>) |
|
Notes
non-propagating-cache is used in implementations to cache the result of begin()
See also
|
(C++20)
|
a view consisting of the sequence obtained from flattening a view of ranges
(class template) (range adaptor object) |
a view consisting of the sequence obtained from flattening a view of ranges, with the delimiter in between elements(class template) (range adaptor object) |
|
|
(C++20)
|
a view over the subranges obtained from splitting another view using a delimiter(class template) (range adaptor object) |
a view over the subranges obtained from splitting another view using a delimiter(class template) (range adaptor object) |
|
|
(C++23)
|
a range of views that are N-sized non-overlapping successive chunks of the elements of another view
(class template) (range adaptor object) |