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!
См. также
|
(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