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!
См. также
|
(C++17) | читает значение варианта по заданному индексу или типу (если тип уникален); в случае ошибки генерирует исключение (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/variant/get_if