std::ranges:: elements_of
From cppreference.com
C++
Ranges library
|
Range primitives | |||||||||||||||||
|
|
Range concepts | |||||||||||||||||||
|
Range factories | |||||||||
|
Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Helper items | |||||||||||||||||
|
|
Defined in header
<ranges>
|
||
template
<
ranges::
range
R,
class
Allocator
=
std::
allocator
<
std::
byte
>
>
struct elements_of ; |
(since C++23) | |
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) |
allocator
|
an allocator of type
Allocator
. It has default member initializer that 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 && , Allocator > ; |
(since C++23) | |
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:2024):
-
- 26.5.6 Class template elements_of [range.elementsof]
Retrieved from "
https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/elements_of&oldid=171338
"