std::get_if (std::variant)
Von cppreference.com
| Definiert in der Header-Datei <variant> |
||
| (1) | (seit C++17) | |
| template< std::size_t I, class... Types > constexpr std::add_pointer_t<std::variant_alternative_t<I, std::variant<Types...>>> |
||
| template< std::size_t I, class... Types > constexpr std::add_pointer_t<const std::variant_alternative_t<I, std::variant<Types...>>> |
||
| (2) | (seit C++17) | |
| template< class T, class... Types > constexpr std::add_pointer_t<T> |
||
| template< class T, class... Types > constexpr std::add_pointer_t<const T> |
||
1) Index-basierter nicht-werfender Accessor: Wenn pv kein Nullzeiger ist und pv->index() == I, wird ein Zeiger auf den Wert zurückgegeben, der im Variant gespeichert ist, auf den pv zeigt. Andernfalls wird ein Nullzeigerwert zurückgegeben. Der Aufruf ist schlecht geformt, wenn
I kein gültiger Index im Variant ist.2) Typ-basierter nicht-werfender Accessor: Äquivalent zu (1), wobei
I der nullbasierte Index von T in Types... ist. Der Aufruf ist schlecht geformt, wenn T kein eindeutiges Element von Types... ist.Inhalt |
[bearbeiten] Template-Parameter
| I | - | zu suchenden Index |
| Typ | - | eindeutiger zu suchenden Typs |
[bearbeiten] Parameter
| pv | - | Zeiger auf einen Variant |
[bearbeiten] Rückgabewert
Zeiger auf den Wert, der im zeigenden Variant gespeichert ist, oder ein Nullzeiger im Fehlerfall.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <variant> int main() { auto check_value = [](const std::variant<int, float>& v) { if (const int* pval = std::get_if<int>(&v)) std::cout << "variant value: " << *pval << '\n'; else std::cout << "failed to get value!" << '\n'; }; std::variant<int, float> v{12}, w{3.f}; check_value(v); check_value(w); }
Ausgabe
variant value: 12 failed to get value!
[bearbeiten] Siehe auch
| (C++17) |
liest den Wert des variants anhand des Index oder des Typs (wenn der Typ eindeutig ist), wirft bei Fehler (function template) |