Namensräume
Varianten
Aktionen

std::get_if (std::variant)

Von cppreference.com
< cpp‎ | utility‎ | variant
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-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 Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
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...>>>

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

#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

liest den Wert des variants anhand des Index oder des Typs (wenn der Typ eindeutig ist), wirft bei Fehler
(function template) [bearbeiten]