Spec-Zone.ru › C++

std::any

Определён в заголовочном файле <any>
class any;
(начиная с C++17)

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

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

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

Функции-члены

(конструктор)
создаёт объект any
(открытая функция-член)
operator=
присваивает значение объекту any
(открытая функция-член)
(деструктор)
уничтожает объект any
(открытая функция-член)
Модификаторы
emplace
изменяет содержащийся объект, создавая новый объект непосредственно на месте
(открытая функция-член)
reset
уничтожает содержащийся объект
(открытая функция-член)
swap
меняет местами два объекта any
(открытая функция-член)
Наблюдатели
has_value
проверяет, содержит ли объект значение
(открытая функция-член)
type
возвращает typeid содержащегося значения
(открытая функция-член)

Нестатические функции

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

Вспомогательные классы

bad_any_cast
(C++17)
исключение, выбрасываемое возвращающими значение формами any_cast при несовпадении типов
(класс)

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_any 201606L (C++17) std::any

Пример

#include <any>
#include <iostream>

int main()
{
    std::cout << std::boolalpha;

    // any type
    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';

    // bad cast
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }

    // has value
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';

    // reset
    a.reset();
    if (!a.has_value())
        std::cout << "no value\n";

    // pointer to contained data
    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

См. также

function
(C++11)
копируемая оболочка для любого копируемого вызываемого объекта
(шаблон класса)
move_only_function
(C++23)
оболочка только для перемещения для любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса)
variant
(C++17)
типобезопасное объединение с дискриминатором
(шаблон класса)
optional
(C++17)
оболочка, которая может содержать объект, а может и не содержать
(шаблон класса)
unique_ptr
(C++11)
умный указатель с семантикой единоличного владения объектом
(шаблон класса)
indirect
(C++26)
оболочка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса)
polymorphic
(C++26)
полиморфная оболочка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/any

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API