std:: any
From cppreference.net
|
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
|
(C++17)
|
spezialisiert den
std::swap
Algorithmus
(Funktion) |
|
(C++17)
|
typsicherer Zugriff auf das enthaltene Objekt
(Funktionstemplate) |
|
(C++17)
|
erstellt ein
any
Objekt
(Funktionstemplate) |
Hilfsklassen
|
(C++17)
|
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
Diesen Code ausführen
#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) |
|
(C++23)
|
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) |
|
(C++26)
|
ein polymorpher Wrapper, der ein dynamisch allokiertes Objekt mit wertähnlicher Semantik enthält
(Klassentemplate) |