std::any
Von de.cppreference.net
< cpp | Dienstprogramme
| Definiert in Header <any>
|
||
class any;
|
(seit C++17) | |
Die Klasse any beschreibt einen typsicheren Container für einzelne Werte eines beliebigen kopierkonstruierbaren Typs.
1) Ein Objekt der Klasse
any speichert eine Instanz eines beliebigen Typs, der die Konstruktoranforderungen erfüllt, oder ist leer; dies wird als der Zustand des any-Objekts bezeichnet. Die gespeicherte Instanz wird als enthaltenes Objekt bezeichnet. Zwei Zustände sind äquivalent, wenn sie beide leer sind oder wenn beide nicht leer sind und die enthaltenen Objekte äquivalent sind.2) Die Nicht-Member-
any_cast-Funktionen bieten typsicheren Zugriff auf das enthaltene Objekt.Implementierungen werden ermutigt, dynamische Allokationen für kleine Objekte zu vermeiden, aber eine solche Optimierung darf nur auf Typen angewendet werden, für die std::is_nothrow_move_constructible true zurückgibt.
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) |