Namespaces
Variants

std:: any

From cppreference.net
Utilities library
Definiert in Header <any>
class any ;
(seit C++17)

Die Klasse any beschreibt einen typsicheren Container für einzelne Werte jedes copy-constructible Typs.

1) Ein Objekt der Klasse any speichert eine Instanz eines beliebigen Typs, der die Konstruktoranforderungen erfüllt, oder ist leer, und dies wird als der Zustand des Klassenobjekts any bezeichnet. Die gespeicherte Instanz wird als enthaltenes Objekt bezeichnet. Zwei Zustände sind äquivalent, wenn sie entweder beide leer sind oder wenn beide nicht leer sind und die enthaltenen Objekte äquivalent sind.
2) Die Nicht-Mitgliedsfunktionen any_cast bieten typsicheren Zugriff auf das enthaltene Objekt.

Typischerweise wenden Implementierungen Small-Object-Optimierung (Vermeidung dynamischer Allokationen) auf Typen an, für die std::is_nothrow_move_constructible true ist.

Inhaltsverzeichnis

Memberfunktionen

konstruiert ein any Objekt
(öffentliche Elementfunktion)
weist ein any Objekt zu
(öffentliche Elementfunktion)
zerstört ein any Objekt
(öffentliche Elementfunktion)
Modifikatoren
ändert das enthaltene Objekt, konstruiert das neue Objekt direkt
(öffentliche Elementfunktion)
zerstört das enthaltene Objekt
(öffentliche Elementfunktion)
tauscht zwei any Objekte
(öffentliche Elementfunktion)
Beobachter
prüft, ob das Objekt einen Wert enthält
(öffentliche Elementfunktion)
gibt die typeid des enthaltenen Werts zurück
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

spezialisiert den std::swap Algorithmus
(Funktion)
(C++17)
typsicherer Zugriff auf das enthaltene Objekt
(Funktionstemplate)
(C++17)
erstellt ein any Objekt
(Funktionstemplate)

Hilfsklassen

Exception, die von den wertrückgebenden Formen von any_cast bei Typinkongruenz ausgelöst wird
(Klasse)

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_any 201606L (C++17) std::any

Beispiel

#include <any>
#include <iostream>
int main()
{
    std::cout << std::boolalpha;
    // beliebiger Typ
    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';
    // ungültiger Cast
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }
    // hat Wert
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';
    // zurücksetzen
    a.reset();
    if (!a.has_value())
        std::cout << "kein Wert\n";
    // Zeiger auf enthaltene Daten
    a = 3;
    int* i = std::any_cast<int>(&a);
    std::cout << *i << '\n';
}

Mögliche Ausgabe:

int: 1
double: 3.14
bool: true
bad any_cast
int: 2
no value
3

Siehe auch

(C++11)
kopierbarer Wrapper für jedes kopierkonstruierbare aufrufbare Objekt
(Klassentemplate)
Nur-verschiebbarer Wrapper für jedes aufrufbare Objekt, das Qualifier in einer gegebenen Aufrufsignatur unterstützt
(Klassentemplate)
(C++17)
eine typsichere, diskriminierte Union
(Klassentemplate)
(C++17)
ein Wrapper, der möglicherweise ein Objekt enthält
(Klassentemplate)
(C++11)
intelligenter Zeiger mit eindeutiger Objektbesitzsemantik
(Klassentemplate)
(C++26)
ein Wrapper, der ein dynamisch allokiertes Objekt mit wertähnlicher Semantik enthält
(Klassentemplate)
ein polymorpher Wrapper, der ein dynamisch allokiertes Objekt mit wertähnlicher Semantik enthält
(Klassentemplate)