Namespaces
Variants

std:: get_if (std::variant)

From cppreference.net
Utilities library
Определено в заголовке <variant>
(1) (начиная с 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) (начиная с 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) Индексный безысключительный метод доступа: Если pv не является нулевым указателем и pv - > index ( ) == I , возвращает указатель на значение, хранящееся в варианте, на который указывает pv . В противном случае возвращает нулевое значение указателя. Вызов является некорректным, если I не является допустимым индексом в варианте.
2) Типобезопасный доступ без генерации исключений: Эквивалентно (1) с I в качестве индекса (с нулевым основанием) для T в Types... . Вызов является некорректным, если T не является уникальным элементом в Types... .

Содержание

Параметры шаблона

I - индекс для поиска
Type - уникальный тип для поиска

Параметры

pv - указатель на вариант

Возвращаемое значение

Указатель на значение, хранящееся в указываемом варианте, или нулевой указатель при ошибке.

Пример

#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);
}

Вывод:

variant value: 12
failed to get value!

Смотрите также

читает значение варианта по заданному индексу или типу (если тип уникален), генерирует исключение при ошибке
(шаблон функции)