std::get(std::variant)
Von cppreference.com
| Definiert in der Header-Datei <variant> |
||
| (1) | (seit C++17) | |
| template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>& |
||
| template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>&& |
||
| template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>& |
||
| template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>&& |
||
| (2) | (seit C++17) | |
| template< class T, class... Types > constexpr T& get( std::variant<Types...>& v ); |
||
| template< class T, class... Types > constexpr T&& get( std::variant<Types...>&& v ); |
||
| template< class T, class... Types > constexpr const T& get( const std::variant<Types...>& v ); |
||
| template< class T, class... Types > constexpr const T&& get( const std::variant<Types...>&& v ); |
||
1) Index-basierter Wert-Zugriff: Wenn v.index() == I ist, wird eine Referenz auf den in v gespeicherten Wert zurückgegeben. Andernfalls wird std::bad_variant_access ausgelöst. Der Aufruf ist ill-formed, wenn
I kein gültiger Index im Variant ist.2) Typ-basierter Wert-Zugriff: Wenn v die Alternative
T enthält, wird eine Referenz auf den in v gespeicherten Wert zurückgegeben. Andernfalls wird std::bad_variant_access ausgelöst. Der Aufruf ist ill-formed, wenn T kein eindeutiges Element von Types... ist.Inhalt |
[bearbeiten] Template-Parameter
| I | - | nachzuschlagender Index |
| T | - | eindeutiger nachzuschlagender Typ |
| Types... | - | Typen, aus denen der variant besteht |
[bearbeiten] Parameter
| v | - | ein variant |
[bearbeiten] Rückgabewert
Referenz auf den im Variant gespeicherten Wert.
[bearbeiten] Exceptions
1,2) Löst bei Fehlern std::bad_variant_access aus.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <string> #include <variant> int main() { std::variant<int, float> v{12}, w; std::cout << std::get<int>(v) << '\n'; w = std::get<int>(v); w = std::get<0>(v); // same effect as the previous line // std::get<double>(v); // error: no double in [int, float] // std::get<3>(v); // error: valid index values are 0 and 1 try { w = 42.0f; std::cout << std::get<float>(w) << '\n'; // ok, prints 42 w = 42; std::cout << std::get<float>(w) << '\n'; // throws } catch (std::bad_variant_access const& ex) { std::cout << ex.what() << ": w contained int, not float\n"; } }
Mögliche Ausgabe
12 42 Unexpected index: w contained int, not float
[bearbeiten] Siehe auch
| (C++17) |
erhält einen Zeiger auf den Wert eines aufgerufenen variant anhand des Index oder des Typs (wenn eindeutig), gibt bei Fehler null zurück(function template) |
| (C++11) |
greift auf ein Tupel-Element gemäß Spezifikation zu (function template) |
| (C++11) |
greift auf ein Element eines arrays zu(Funktionstemplate) |
| (C++11) |
greift auf ein Element eines pair zu(Funktionsvorlage) |
| (C++20) |
erhält Iterator oder Sentinel von einem std::ranges::subrange (Funktionsvorlage) |
| (C++26) |
erhält eine Referenz auf den realen oder imaginären Teil von std::complex (function template) |