std:: any
From cppreference.net
|
Défini dans l'en-tête
<any>
|
||
|
class
any
;
|
(depuis C++17) | |
La classe
any
décrit un conteneur de type sécurisé pour des valeurs individuelles de tout type
copiable
.
1)
Un objet de la classe
any
stocke une instance de tout type qui satisfait aux 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 soit tous deux vides, soit 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.
Typiquement, les implémentations appliquent l'optimisation des petits objets (évitant les allocations dynamiques) aux types pour lesquels std::is_nothrow_move_constructible est true .
Table des matières |
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) |