close
Пространства имён
Варианты
Действия

std::get_if (std::variant)

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num t-dcl-rev-notes t-since-cxx17 "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num t-dcl-rev-notes t-since-cxx17 "> </tbody><tbody> </tbody>
Определено в заголовочном файле <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, возвращает указатель на значение, хранящееся в variant, на который указывает pv. Иначе возвращает нулевое значение указателя. Вызов некорректен, если I не является допустимым индексом в variant.
2) Метод доступа на основе типа без генерации исключения: Эквивалентно (1), где I является отсчитываемым от нуля индексом T в Types.... Вызов некорректен, если T не является уникальным элементом Types....

Параметры

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

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

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

Пример

#include <variant>
#include <iostream>

int main()
{
    auto check_value = [](const std::variant<int, float>& v)
    {
        if(const int* pval = std::get_if<int>(&v))
          std::cout << "значение variant: " << *pval << '\n'; 
        else 
          std::cout << "не удалось получить значение!" << '\n'; 
    };

    std::variant<int, float> v{12}, w{3.f};
    check_value(v);
    check_value(w);
}

Вывод:

значение variant: 12
не удалось получить значение!

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

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