Namespaces
Variants

std:: get_if (std::variant)

From cppreference.net
Utilities library
Definiert im Header <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... >>>

get_if ( std:: variant < Types... > * pv ) noexcept ;
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 ;
template < class T, class ... Types >

constexpr std:: add_pointer_t < const T >

get_if ( const std:: variant < Types... > * pv ) noexcept ;
1) Index-basierter nicht-werfender Zugriff: Wenn pv kein Nullzeiger ist und pv - > index ( ) == I , gibt einen Zeiger auf den im Variant gespeicherten Wert zurück. Andernfalls wird ein Nullzeigerwert zurückgegeben. Der Aufruf ist fehlerhaft, wenn I kein gültiger Index im Variant ist.
2) Typbasierter nicht-werfender Zugriff: Entspricht (1) mit I als nullbasiertem Index von T in Types... . Der Aufruf ist fehlerhaft, wenn T kein eindeutiges Element von Types... ist.

Inhaltsverzeichnis

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)