Namespaces
Variants

std:: any

From cppreference.net
Utilities library
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

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

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

#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)
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)
enveloppe polymorphe contenant un objet alloué dynamiquement avec sémantique de valeur
(modèle de classe)