std::ranges::elements_of
Von cppreference.com
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::range R, class Allocator = std::allocator<std::byte> > struct elements_of; |
(seit C++23) | |
Kapselt einen range. Spezialisierungen von elements_of dienen als Tag in Überladungs-Sets, um zu unterscheiden, wann ein Bereich als Sequenz und nicht als einzelner Wert behandelt werden soll.
Inhalt |
[bearbeiten] Template-Parameter
| R | - | ein Typ, der range erfüllt |
| Allocator | - | ein Allokator-Typ, der die Anforderungen von Allocator erfüllt |
[bearbeiten] Datenmember
| Member-Name | Definition |
| range |
ein Bereich vom Typ R(öffentliches Mitgliedsobjekt) |
| allocator |
ein Allokator vom Typ Allocator. Er hat eine Standard-Member-Initialisierung, die sich selbst wertinitialisiert(öffentliches Mitgliedsobjekt) |
Alle diese Member werden mit dem Attribut [[no_unique_address]] deklariert.
[bearbeiten] Deduktionshilfe
| template< class R, class Allocator = std::allocator<std::byte> > elements_of( R&&, Allocator = Allocator() ) -> elements_of<R&&, Allocator>; |
(seit C++23) | |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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'; }
Ausgabe
[t] [e] [s] [t] [test]
[bearbeiten] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 26.5.6 Klasse Template elements_of [range.elementsof]