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
возвращает тип содержащегося значения
(публичный член-функция)

Внеклассные функции

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)
оболочка, которая может или не может содержать объект
(шаблон класса)

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

Spec-Zone.ru

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