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

Класс any

Класс any из заголовка <any> представляет собой контейнер, способный хранить значение любого типа. Он позволяет сохранять данные произвольного типа и извлекать их с проверкой типа во время выполнения. Класс any полезен в ситуациях, когда тип данных заранее неизвестен или может изменяться. При создании объекта any можно передать значение любого копируемого типа, а для извлечения используется функция any_cast.

Синтаксис

#include <any> any a; // пустой any any a(value); // any со значением any a(other); // копирование a = value; // присваивание значения a = other; // присваивание другого any a.has_value(); // проверка наличия значения a.reset(); // очистка значения a.type(); // получение type_info any_cast<T>(a); // извлечение значения типа T

Пример

Давайте создадим объект any с целым числом и извлечем значение с помощью any_cast:

#include <iostream> #include <any> using namespace std; int main() { any a = 42; cout << any_cast<int>(a) << endl; return 0; }

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

42

Пример

Давайте сохраним строку в any и проверим тип:

#include <iostream> #include <any> #include <string> using namespace std; int main() { any a = string("abcde"); cout << a.has_value() << endl; cout << (a.type() == typeid(string)) << endl; cout << any_cast<string>(a) << endl; return 0; }

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

1 1 "abcde"

Пример

Давайте создадим пустой any, присвоим значение, а затем сбросим его:

#include <iostream> #include <any> using namespace std; int main() { any a; cout << a.has_value() << endl; a = 3.14; cout << a.has_value() << endl; cout << any_cast<double>(a) << endl; a.reset(); cout << a.has_value() << endl; return 0; }

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

0 1 3.14 0

Пример

Давайте изменим тип хранимого значения с int на string и обработаем неверное извлечение:

#include <iostream> #include <any> #include <string> using namespace std; int main() { any a = 12345; try { cout << any_cast<string>(a) << endl; } catch (const bad_any_cast& e) { cout << "bad_any_cast" << endl; } a = string("abcde"); cout << any_cast<string>(a) << endl; return 0; }

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

"bad_any_cast" "abcde"

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

  • класс tuple,
    который хранит набор разнотипных значений
  • класс pair,
    который хранит пару значений
  • тип type_info,
    который хранит информацию о типе
  • тип void,
    который обозначает отсутствие типа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить