std::get (std::variant)
Материал из cppreference.com
Определено в заголовочном файле <variant>
|
||
(1) | (начиная с C++17) | |
template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>& |
||
template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>&& |
||
template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>& |
||
template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>&& |
||
(2) | (начиная с C++17) | |
template< class T, class... Types > constexpr T& get( std::variant<Types...>& v ); |
||
template< class T, class... Types > constexpr T&& get( std::variant<Types...>&& v ); |
||
template< class T, class... Types > constexpr const T& get( const std::variant<Types...>& v ); |
||
template< class T, class... Types > constexpr const T&& get( const std::variant<Types...>&& v ); |
||
1) Метод доступа к значению на основе индекса: если v.index() == I, возвращает ссылку на значение, хранящееся в
v
. Иначе генерирует std::bad_variant_access. Вызов некорректен, если I
не является допустимым индексом в variant.2) Метод доступа к значению на основе типа: если v содержит альтернативу
T
, возвращает ссылку на значение, хранящееся в v
. Иначе генерирует std::bad_variant_access. Вызов некорректен, если T
не является уникальным элементом Types...
.Содержание |
[править] Параметры шаблона
I | — | индекс для поиска |
T | — | уникальный тип для поиска |
Types... | — | типы, образующие variant
|
[править] Параметры
v | — | variant
|
[править] Возвращаемое значение
Ссылка на значение, хранящееся в варианте.
[править] Исключения
1,2) Генерирует std::bad_variant_access при ошибках.
[править] Пример
Запустить этот код
#include <variant> #include <string> #include <iostream> int main() { std::variant<int, float> v{12}, w; std::cout << std::get<int>(v) << '\n'; w = std::get<int>(v); w = std::get<0>(v); // тот же эффект, что и в предыдущей строке // std::get<double>(v); // ошибка: нет double в [int, float] // std::get<3>(v); // ошибка: допустимые значения индекса 0 и 1 try { w = 42.0f; std::cout << std::get<float>(w) << '\n'; // ok, печатает 42 w = 42; std::cout << std::get<float>(w) << '\n'; // генерирует исключение } catch (std::bad_variant_access const& ex) { std::cout << ex.what() << ": w содержит int, а не float\n"; } }
Возможный вывод:
12 42 Unexpected index: w содержит int, а не float
[править] Смотрите также
(C++17) |
получает указатель на значение variant, переданного по указателю, по индексу или типу (если он уникален), возвращает null при ошибке (шаблон функции) |
(C++11) |
доступ к определённому элементу кортежа (шаблон функции) |
(C++11) |
предоставляет доступ к элементу array (шаблон функции) |
(C++11) |
доступ к элементу пары (шаблон функции) |
(C++20) |
получает итератор или ограничитель из std::ranges::subrange (шаблон функции) |