Namespaces
Variants

std::get_if (std::variant)

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (grundlegende Typen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Funktionen mit variabler Argumentanzahl
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabeltypen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert im Header <variant>
template< std::size_t I, class... Types >
constexpr std::add_pointer_t<std::variant_alternative_t<I, std::variant<Types...>>>
    get_if( std::variant<Types...>* pv ) noexcept;
(1) (seit C++17)
template< std::size_t I, class... Types >
constexpr std::add_pointer_t<const std::variant_alternative_t<I, std::variant<Types...>>>
    get_if( const std::variant<Types...>* pv ) noexcept;
(2) (seit C++17)
template< class T, class... Types >
constexpr std::add_pointer_t<T>
    get_if( std::variant<Types...>* pv ) noexcept;
(3) (seit C++17)
template< class T, class... Types >
constexpr std::add_pointer_t<const T>
    get_if( const std::variant<Types...>* pv ) noexcept;
(4) (seit C++17)
1,2) Indexbasierter, nicht-werfender Zugriff: Wenn pv kein Nullzeiger ist und pv->index() == I, wird ein Zeiger auf den Wert zurückgegeben, der in der Variante gespeichert ist, auf die pv zeigt. Andernfalls wird ein Nullzeigerwert zurückgegeben. Der Aufruf ist fehlerhaft, wenn I kein gültiger Index in der Variante ist.
3,4) Typbasierter, nicht-werfender Zugriff: Äquivalent zu (1) mit I als dem nullbasierten Index von T in Types.... Der Aufruf ist fehlerhaft, wenn T kein eindeutiges Element von Types... ist.

Template-Parameter

I - Index für die Suche
Typ - Eindeutiger Typ für die Suche

Parameter

pv - Zeiger auf eine Variante

Rückgabewert

Zeiger auf den im gezeigten Variant gespeicherten Wert oder Nullzeiger bei Fehler.

Beispiel

#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!

Siehe auch

liest den Wert des Varianten gegeben den Index oder den Typ (falls der Typ eindeutig ist), wirft bei Fehler
(Funktions-Template)