std::ranges::elements_of
De fr.cppreference.net
| Défini dans l'en-tête <ranges>
|
||
template< ranges::range R, class Allocator = std::allocator<std::byte> >
struct elements_of;
|
(depuis C++23) | |
Encapsule une plage. Les spécialisations de elements_of agissent comme un tag dans les ensembles de surcharge pour désambiguïser lorsqu'une plage doit être traitée comme une séquence plutôt que comme une valeur unique.
Paramètres du modèle
| R | - |
un type qui satisfait
range
|
| Allocator | - | un type d'allocateur qui répond aux exigences de Allocator |
Membres de données
| Nombre du membre | Définition |
|
range
|
une plage de type
R
(objet membre public) |
|
allocator
|
un allocateur de type
Allocator
. Il possède un initialiseur de membre par défaut qui s'initialise par valeur
(objet membre public) |
Tous ces membres sont déclarés avec l'attribut
[[
no_unique_address
]]
.
Guide de déduction
|
template
<
class
R,
class
Allocator
=
std::
allocator
<
std::
byte
>
>
elements_of ( R && , Allocator = Allocator ( ) ) - > elements_of < R && , Allocator > ; |
(depuis C++23) | |
`. Tous les termes C++ spécifiques, le code et les balises HTML ont été préservés intacts.
Exemple
Exécuter ce 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); // produire chaque élément de r else co_yield r; // produire r comme une valeur unique } 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'; }
Sortie :
[t] [e] [s] [t] [test]
Références
- Norme C++23 (ISO/IEC 14882:2024) :
-
- 26.5.6 Modèle de classe elements_of [range.elementsof]