Namespaces
Variants

std:: any

From cppreference.net
Utilities library
Definido en el encabezado <any>
class any ;
(desde C++17)

La clase any describe un contenedor seguro de tipos para valores individuales de cualquier tipo copy constructible .

1) Un objeto de la clase any almacena una instancia de cualquier tipo que satisfaga los requisitos del constructor o está vacío, y esto se denomina estado del objeto de la clase any . La instancia almacenada se denomina objeto contenido. Dos estados son equivalentes si ambos están vacíos o si ambos no están vacíos y si los objetos contenidos son equivalentes.
2) Las funciones no miembro any_cast proporcionan acceso seguro al tipo del objeto contenido.

Típicamente, las implementaciones aplican la optimización de objetos pequeños (evitan asignaciones dinámicas) a tipos para los cuales std::is_nothrow_move_constructible es true .

Contenidos

Funciones miembro

construye un objeto any
(función miembro pública)
asigna un objeto any
(función miembro pública)
destruye un objeto any
(función miembro pública)
Modificadores
cambia el objeto contenido, construyendo el nuevo objeto directamente
(función miembro pública)
destruye el objeto contenido
(función miembro pública)
intercambia dos objetos any
(función miembro pública)
Observadores
verifica si el objeto contiene un valor
(función miembro pública)
devuelve el typeid del valor contenido
(función miembro pública)

Funciones no miembro

especializa el algoritmo std::swap
(función)
(C++17)
acceso seguro al tipo del objeto contenido
(plantilla de función)
(C++17)
crea un objeto any
(plantilla de función)

Clases auxiliares

excepción lanzada por las formas que retornan valor de any_cast en caso de discrepancia de tipo
(clase)

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_any 201606L (C++17) std::any

Ejemplo

#include <any>
#include <iostream>
int main()
{
    std::cout << std::boolalpha;
    // cualquier tipo
    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';
    // conversión incorrecta
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }
    // tiene valor
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';
    // reiniciar
    a.reset();
    if (!a.has_value())
        std::cout << "sin valor\n";
    // puntero a los datos contenidos
    a = 3;
    int* i = std::any_cast<int>(&a);
    std::cout << *i << '\n';
}

Salida posible:

int: 1
double: 3.14
bool: true
bad any_cast
int: 2
no value
3

Véase también

(C++11)
envoltorio copiable de cualquier objeto invocable copiable
(plantilla de clase)
envoltorio no copiable de cualquier objeto invocable que soporta calificadores en una firma de llamada dada
(plantilla de clase)
(C++17)
una unión discriminada con seguridad de tipos
(plantilla de clase)
(C++17)
un envoltorio que puede o no contener un objeto
(plantilla de clase)
(C++11)
puntero inteligente con semántica de propiedad única de objetos
(plantilla de clase)
(C++26)
un envoltorio que contiene un objeto asignado dinámicamente con semántica de valor
(plantilla de clase)
un envoltorio polimórfico que contiene un objeto asignado dinámicamente con semántica de valor
(plantilla de clase)