Namespaces
Variants

std::get_if (std::variant)

Из ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношения (устарело в C++20)
 
 
Определён в заголовке <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) (начиная с 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) (начиная с C++17)
template< class T, class... Types >
constexpr std::add_pointer_t<T>
    get_if( std::variant<Types...>* pv ) noexcept;
(3) (начиная с C++17)
template< class T, class... Types >
constexpr std::add_pointer_t<const T>
    get_if( const std::variant<Types...>* pv ) noexcept;
(4) (начиная с C++17)
1,2) Доступ без выбрасывания исключений на основе индекса: если pv не является нулевым указателем и pv->index() == I, возвращает указатель на значение, хранящееся в variant, на который указывает pv. В противном случае возвращает значение нулевого указателя. Вызов является некорректным, если I не является допустимым индексом в variant.
3,4) Доступ без выбрасывания исключений на основе типа: эквивалентно (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!

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

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