table of contents
std::ranges::elements_of(3) | C++ Standard Libary | std::ranges::elements_of(3) |
NAME¶
std::ranges::elements_of - std::ranges::elements_of
Synopsis¶
Defined in header <ranges>
template< ranges::range R, class Allocator =
std::allocator<std::byte> > (since C++23)
struct elements_of;
Encapsulates a range. Specializations of elements_of act as a tag in overload
sets
to disambiguate when a range should be treated as a sequence rather than a
single
value.
Template parameters¶
R - a type that satisfies range
Allocator - an allocator type that meets the requirements of Allocator
Data members
Member name Definition
range a range of type R
(public member object)
an allocator of type Allocator. It has default member initializer that
allocator value initializes itself
(public member object)
All these members are declared with [[no_unique_address]] attribute.
Deduction guide
template< class R, class Allocator = std::allocator<std::byte> >
elements_of( R&&, Allocator = Allocator() ) ->
elements_of<R&&, (since C++23)
Allocator>;
Example¶
// Run this code
#include <any>
#include <generator>
#include <iostream>
#include <ranges>
#include <string_view>
template<bool Elementwise>
std::generator<std::any> gen(std::ranges::input_range auto&& r)
{
if constexpr (Elementwise)
co_yield std::ranges::elements_of(r); // yield each element of r
else
co_yield r; // yield r as a single value
}
int main()
{
auto test = std::string_view{"test"};
for (std::any a : gen<true>(test))
std::cout << '[' << std::any_cast<char>(a) << "]
";
std::cout << '\n';
for (std::any a : gen<false>(test))
std::cout << '[' << std::any_cast<std::string_view>(a)
<< "] ";
std::cout << '\n';
}
Output:¶
[t] [e] [s] [t]
[test]
References¶
* C++23 standard (ISO/IEC 14882:2023):
* 26.5.6 Class template elements_of [range.elementsof]
2024.06.10 | http://cppreference.com |