Пространства имён
Варианты
Действия

std::any

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
any
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Определено в заголовочном файле <any>
class any;
(начиная с C++17)

Класс any описывает типобезопасный контейнер для отдельных значений любого копируемого типа.

1) Объект класса any хранит экземпляр любого типа, который соответствует требованиям конструктора или является пустым, и это называется состоянием объекта класса any. Сохранённый экземпляр называется вложенным объектом. Два состояния эквивалентны, если они оба пусты или оба не пусты и если содержащиеся объекты эквивалентны.
2) Функции any_cast не являющиеся элементами, обеспечивают безопасный по типу доступ к содержащемуся объекту.

Реализациям рекомендуется избегать динамического выделения памяти для небольших объектов, но такая оптимизация может применяться только к типам, для которых std::is_nothrow_move_constructible возвращает true.

Содержание

[править]Функции-элементы

создаёт объект any
(public функция-элемент)[править]
присваивает объект any
(public функция-элемент)[править]
уничтожает объект any
(public функция-элемент)[править]
Модификаторы
изменяет содержащийся объект, созданием нового объекта напрямую
(public функция-элемент)[править]
уничтожает содержащийся объект
(public функция-элемент)[править]
обменивает два объекта any
(public функция-элемент)[править]
Наблюдатели
проверяет, содержит ли объект значение
(public функция-элемент)[править]
возвращает typeid содержащегося значения
(public функция-элемент)[править]

[править]Функции, не являющиеся элементами

специализация алгоритма std::swap
(функция)[править]
(C++17)
типобезопасный доступ к содержащемуся объекту
(шаблон функции)[править]
(C++17)
создаёт объект any
(шаблон функции)[править]

[править]Вспомогательные классы

исключение, создаваемое формами с возвращаемым значением any_cast при несоответствии типа
(класс)[править]

[править]Примечание

Макрос Тестирования функциональностиЗначениеСтандартФункциональность
__cpp_lib_any201606L(C++17)std::any

[править]Пример

#include <any>#include <iostream>   int main(){std::cout<<std::boolalpha;   // любой тип std::any a =1;std::cout<< a.type().name()<<": "<<std::any_cast<int>(a)<<'\n'; a =3.14;std::cout<< a.type().name()<<": "<<std::any_cast<double>(a)<<'\n'; a =true;std::cout<< a.type().name()<<": "<<std::any_cast<bool>(a)<<'\n';   // неверное приведениеtry{ a =1;std::cout<<std::any_cast<float>(a)<<'\n';}catch(conststd::bad_any_cast& e){std::cout<< e.what()<<'\n';}   // имеет значение a =2;if(a.has_value()){std::cout<< a.type().name()<<<<": "<<std::any_cast<int>(a)<<'\n';}   // сброс a.reset();if(!a.has_value()){std::cout<<"нет значения\n";}   // указатель на содержащиеся данные a =3;int* i =std::any_cast<int>(&a);std::cout<<*i <<'\n';}

Возможный вывод:

int: 1 double: 3.14 bool: true bad any_cast int: 2 нет значения 3

[править]Смотрите также

(C++11)
обёртывает вызываемый объект любого конструируемого копированием типа с указанной сигнатурой вызова функции
(шаблон класса)[править]
обёртывает вызываемый объект любого типа с указанной сигнатурой вызова функции
(шаблон класса)[править]
(C++17)
типобезопасное размеченное объединение
(шаблон класса)[править]
(C++17)
обёртка, которая может содержать или не содержать объект
(шаблон класса)[править]
close