std::any
Von cppreference.com
| Definiert in der Header-Datei <any> |
||
| class any; |
(seit C++17) | |
Die Klasse any beschreibt einen typsicheren Container für einzelne Werte von jedem kopierkonstruierbaren Typ.
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 any-Objekts 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-Member-Funktionen
any_cast bieten typsicheren Zugriff auf das enthaltene Objekt.Implementierungen werden ermutigt, dynamische Allokationen für kleine Objekte zu vermeiden, aber eine solche Optimierung darf nur für Typen angewendet werden, für die std::is_nothrow_move_constructible true zurückgibt.
Inhalt |
[edit] Member functions
konstruiert ein any-Objekt(public member function) | |
weist ein any-Objekt zu(public member function) | |
zerstört ein any-Objekt(public member function) | |
Modifizierer | |
| ändert das enthaltene Objekt und konstruiert das neue Objekt direkt (public member function) | |
| zerstört das enthaltene Objekt (public member function) | |
tauscht zwei any-Objekte(public member function) | |
Observer | |
| prüft, ob das Objekt einen Wert enthält (public member function) | |
gibt das typeid des enthaltenen Werts zurück(public member function) | |
[edit] Non-member functions
| (C++17) |
spezialisiert den Algorithmus std::swap (function) |
| (C++17) |
typsicherer Zugriff auf das enthaltene Objekt (function template) |
| (C++17) |
erstellt ein any-Objekt(function template) |
[edit] Helper classes
| (C++17) |
Ausnahme, die von den Rückgabeformen von any_cast bei einem Typ-Mismatch ausgelöst wird(class) |
[edit] Notes
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_any |
201606L |
(C++17) | std::any
|
[edit] Example
Führen Sie diesen Code aus
#include <any> #include <iostream> int main() { std::cout << std::boolalpha; // any type 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'; // bad cast try { a = 1; std::cout << std::any_cast<float>(a) << '\n'; } catch (const std::bad_any_cast& e) { std::cout << e.what() << '\n'; } // has value a = 2; if (a.has_value()) std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; // reset a.reset(); if (!a.has_value()) std::cout << "no value\n"; // pointer to contained data 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
[edit] See also
| (C++11) |
kopierfähiger Wrapper für jedes kopierkonstruierbare aufrufbare Objekt (Klassen-Template) |
| (C++23) |
Move-only-Wrapper für jedes aufrufbare Objekt, das Qualifizierer in einer gegebenen Aufrufsignatur unterstützt (Klassen-Template) |
| (C++17) |
eine typsichere diskriminierte Union (Klassentemplate) |
| (C++17) |
ein Wrapper, der möglicherweise ein Objekt enthält oder auch nicht (Klassenvorlage) |