Namespaces
Variants

std::any

На сайте ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
Функции сравнения целых чисел
(C++20)(C++20)(C++20)    
(C++20)
Обмен и операции с типами
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общеупотребительные типы-обёртки
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



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

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

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

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

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

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

Функции, не являющиеся членами класса

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

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

исключение, выбрасываемое формами 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++17)
типобезопасное размеченное объединение
(шаблон класса)
(C++17)
обёртка, которая может содержать или не содержать объект
(шаблон класса)
(C++11)
умный указатель с семантикой уникального владения объектом
(шаблон класса)
(C++26)
обёртка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса)
полиморфная обёртка, содержащая динамически выделенный объект с семантикой значения
(шаблон класса)