std::get_if (std::variant)
Материал из cppreference.com
<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
не удалось получить значение!
Смотрите также
(C++17) |
читает значение variant по заданному индексу или типу (если тип уникален), генерирует исключение при ошибке (шаблон функции) |