std::any
Depuis fr.cppreference.net
< cpp | utilitaires
| Défini dans l'en-tête <any>
|
||
class any;
|
(depuis C++17) | |
La classe any décrit un conteneur type-safe pour des valeurs uniques de tout type constructible par copie.
1) Un objet de la classe
any stocke une instance de tout type qui satisfait les exigences du constructeur ou est vide, et ceci est appelé l'état de l'objet de la classe any. L'instance stockée est appelée l'objet contenu. Deux états sont équivalents s'ils sont tous deux vides ou si tous deux ne sont pas vides et si les objets contenus sont équivalents.2) Les fonctions non membres
any_cast fournissent un accès type-safe à l'objet contenu.Il est recommandé aux implémentations d'éviter les allocations dynamiques pour les petits objets, mais une telle optimisation ne peut être appliquée qu'aux types pour lesquels std::is_nothrow_move_constructible renvoie true.
Fonctions membres
construit un objet
any
(fonction membre publique) |
|
assigne un objet
any
(fonction membre publique) |
|
détruit un objet
any
(fonction membre publique) |
|
Modificateurs |
|
|
modifie l'objet contenu, en construisant le nouvel objet directement
(fonction membre publique) |
|
|
détruit l'objet contenu
(fonction membre publique) |
|
échange deux objets
any
(fonction membre publique) |
|
Observateurs |
|
|
vérifie si l'objet contient une valeur
(fonction membre publique) |
|
retourne le
typeid
de la valeur contenue
(fonction membre publique) |
|
Fonctions non membres
|
(C++17)
|
spécialise l'algorithme
std::swap
(fonction) |
|
(C++17)
|
accès type-safe à l'objet contenu
(modèle de fonction) |
|
(C++17)
|
crée un objet
any
(modèle de fonction) |
Classes d'assistance
|
(C++17)
|
exception levée par les formes de retour de valeur de
any_cast
en cas d'incompatibilité de type
(classe) |
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_any
|
201606L
|
(C++17) |
std::any
|
Exemple
Exécuter ce code
#include <any> #include <iostream> int main() { std::cout << std::boolalpha; // type quelconque std::any a = 1; std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; a = 3.14; std::cout << a.type().name() << ": " << std::any_cast<double>(a) << '\n'; a = true; std::cout << a.type().name() << ": " << std::any_cast<bool>(a) << '\n'; // conversion incorrecte try { a = 1; std::cout << std::any_cast<float>(a) << '\n'; } catch (const std::bad_any_cast& e) { std::cout << e.what() << '\n'; } // possède une valeur a = 2; if (a.has_value()) std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; // réinitialisation a.reset(); if (!a.has_value()) std::cout << "aucune valeur\n"; // pointeur vers les données contenues a = 3; int* i = std::any_cast<int>(&a); std::cout << *i << '\n'; }
Sortie possible :
int: 1 double: 3.14 bool: true bad any_cast int: 2 no value 3
Voir aussi
|
(C++11)
|
enveloppe copiable de tout objet appelable copiable
(modèle de classe) |
|
(C++23)
|
enveloppe non copiable de tout objet appelable prenant en charge les qualificateurs dans une signature d'appel donnée
(modèle de classe) |
|
(C++17)
|
union discriminée type-safe
(modèle de classe) |
|
(C++17)
|
enveloppe pouvant contenir ou non un objet
(modèle de classe) |
|
(C++11)
|
pointeur intelligent avec sémantique de propriété exclusive
(modèle de classe) |
|
(C++26)
|
enveloppe contenant un objet alloué dynamiquement avec sémantique de valeur
(modèle de classe) |
|
(C++26)
|
enveloppe polymorphe contenant un objet alloué dynamiquement avec sémantique de valeur
(modèle de classe) |