kennen:include:any
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:any [2017-05-02 15:22] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== <any> ====== | ||
+ | ===== Beliebige Dinge verpacken ===== | ||
+ | Der Typ '' | ||
+ | Das verwaltete Objekt wird bei Zuweisung eines anderen Objektes zerstört, spätestens jedoch mit der Kapsel: | ||
+ | |||
+ | <code cpp> | ||
+ | std::any o; // empty | ||
+ | o = 1; | ||
+ | o = 3.14; | ||
+ | o = "hello world"; | ||
+ | </ | ||
+ | |||
+ | ===== Auspacken ===== | ||
+ | Entpacken erfordert die Kenntnis der möglicherweise enthaltenen Typen. | ||
+ | Ein erfolgreicher '' | ||
+ | <code cpp> | ||
+ | if (auto ptr = std:: | ||
+ | if (auto ptr = std:: | ||
+ | if (auto ptr = std:: | ||
+ | </ | ||
+ | Wird //die Kapsel selbst// gecastet, erhält man bei passendem Typ Zugriff auf das enthaltene Objekt. Andernfalls wird eine Ausnahme geworfen: | ||
+ | <code cpp> | ||
+ | try | ||
+ | { | ||
+ | std::cout << std:: | ||
+ | } | ||
+ | catch(std:: | ||
+ | { | ||
+ | std::cerr << err.what() << ' | ||
+ | } | ||
+ | </ | ||
+ | ===== Wegwerfen ===== | ||
+ | Das enthaltene Objekt lässt sich bei Bedarf löschen: | ||
+ | <code cpp> | ||
+ | if (o.has_value()) o.reset(); | ||
+ | </ | ||
+ | |||
+ | ===== Objekt aus Parametern bauen ===== | ||
+ | Das Objekt lässt sich direkt im Wrapper aus übergebenen Konstruktorparametern zusammensetzen: | ||
+ | <code cpp> | ||
+ | std::any a(std:: | ||
+ | |||
+ | a.emplace< | ||
+ | std::cout << std:: | ||
+ | </ | ||
kennen/include/any.txt · Zuletzt geändert: 2017-05-02 15:22 von 127.0.0.1