Spec-Zone.ru › C++

std::get_if (std::variant)

Определено в заголовке <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!

См. также

get(std::variant)
(C++17)
считывает значение варианта по индексу или типу (если тип уникальный), выбрасывает исключение при ошибке
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/variant/get_if

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API