РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
449 of 815 menu

Функция get_if

Функция get_if возвращает указатель на значение, хранящееся в объекте variant, если тип этого значения совпадает с запрошенным. В отличие от функции get, которая при несовпадении типа выбрасывает исключение, get_if в такой ситуации возвращает nullptr. В первый параметр мы передаем указатель на объект variant, а во второй - тип, значение которого мы хотим получить. Также существует перегрузка, где во второй параметр передается индекс альтернативы.

Синтаксис

template <class T, class... Types> T* get_if(variant<Types...>* pv) noexcept; template <size_t I, class... Types> auto get_if(variant<Types...>* pv) noexcept;

Пример

Давайте создадим variant, который хранит значение типа int, и попробуем получить его через get_if:

#include <iostream> #include <variant> using namespace std; int main() { variant<int, double, string> var = 42; int* p = get_if<int>(&var); if (p != nullptr) { cout << *p << endl; } return 0; }

Результат выполнения кода:

42

Пример

Теперь попробуем запросить тип, которого нет в variant. В этом случае get_if вернет nullptr:

#include <iostream> #include <variant> using namespace std; int main() { variant<int, double, string> var = 42; double* p = get_if<double>(&var); if (p == nullptr) { cout << "nullptr" << endl; } return 0; }

Результат выполнения кода:

"nullptr"

Пример

Также можно обращаться к значению по индексу альтернативы. Давайте получим элемент с индексом 2 (это строка string):

#include <iostream> #include <variant> #include <string> using namespace std; int main() { variant<int, double, string> var = "abcde"; string* p = get_if<2>(&var); if (p != nullptr) { cout << *p << endl; } return 0; }

Результат выполнения кода:

"abcde"

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

  • класс variant,
    который хранит значение одного из нескольких типов
  • функция get,
    которая получает значение из variant с проверкой
  • функция holds_alternative,
    которая проверяет, хранится ли в variant заданный тип
  • метод index,
    который возвращает индекс текущей альтернативы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить