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

std::any

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, 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++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
<tbody> </tbody>
Определено в заголовочном файле <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_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
нет значения
3

Смотрите также

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