Spec-Zone.ru › C++

std::get_if (std::variant)

Определён в заголовке <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, возвращает указатель на значение, хранящееся в варианте, на который указывает pv. В противном случае возвращается нулевой указатель. Вызов некорректен, если I не является допустимым индексом в варианте.
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!

См. также

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

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

Spec-Zone.ru

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