std:: any
From cppreference.net
|
Определено в заголовке
<any>
|
||
|
class
any
;
|
(начиная с C++17) | |
Класс
any
описывает типобезопасный контейнер для одиночных значений любого
копируемого
типа.
1)
Объект класса
any
хранит экземпляр любого типа, удовлетворяющего требованиям конструктора, или является пустым, и это называется
состоянием
объекта класса
any
. Хранимый экземпляр называется содержащимся объектом. Два состояния эквивалентны, если они либо оба пусты, либо оба не пусты и содержащиеся объекты эквивалентны.
2)
Функции, не являющиеся членами класса,
any_cast
обеспечивают типобезопасный доступ к содержащемуся объекту.
Обычно реализации применяют оптимизацию малых объектов (избегая динамических выделений памяти) к типам, для которых std::is_nothrow_move_constructible имеет значение true .
Содержание |
Функции-члены
создает объект
any
(публичная функция-член) |
|
присваивает объект
any
(публичная функция-член) |
|
уничтожает объект
any
(публичная функция-член) |
|
Модификаторы |
|
|
изменяет содержащийся объект, конструируя новый объект напрямую
(публичная функция-член) |
|
|
уничтожает содержащийся объект
(публичная функция-член) |
|
обменивает два объекта
any
(публичная функция-член) |
|
Наблюдатели |
|
|
проверяет, содержит ли объект значение
(публичная функция-член) |
|
возвращает
typeid
содержащегося значения
(публичная функция-член) |
|
Функции, не являющиеся членами класса
|
(C++17)
|
специализирует алгоритм
std::swap
(функция) |
|
(C++17)
|
типобезопасный доступ к содержащемуся объекту
(шаблон функции) |
|
(C++17)
|
создаёт объект
any
(шаблон функции) |
Вспомогательные классы
|
(C++17)
|
исключение, выбрасываемое формами
any_cast
с возвратом значения при несоответствии типов
(класс) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_any
|
201606L
|
(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 (const std::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 no value 3
Смотрите также
|
(C++11)
|
копируемая обёртка любого копируемого вызываемого объекта
(шаблон класса) |
|
(C++23)
|
перемещаемая обёртка любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса) |
|
(C++17)
|
типобезопасное размеченное объединение
(шаблон класса) |
|
(C++17)
|
обёртка, которая может содержать или не содержать объект
(шаблон класса) |
|
(C++11)
|
умный указатель с семантикой уникального владения объектом
(шаблон класса) |
|
(C++26)
|
обёртка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса) |
|
(C++26)
|
полиморфная обёртка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса) |