Espacios de nombres
Variantes
Acciones

std::any

De cppreference.com
< cpp‎ | utility
 
 
 
std::any
 
Definido en el archivo de encabezado <any>
class any;
(desde C++17)

La clase any describe un contenedor de tipo seguro para valores sencillos de cualquier tipo.

1) Un objeto de la clase any almacena una instancia de cualquier tipo que satisfaga los requisitos del constructor o esté vacía, y esto se conoce como el "estado" de la clase objeto {{tt|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 de any_cast proporcionan acceso de tipo seguro al objeto contenido.

Se recomienda que las implementaciones eviten las asignaciones dinámicas para objetos pequeños, pero dicha optimización solo se puede aplicar a los tipos para los que std::is_nothrow_move_constructible devuelve true.

Contenido

[editar] Funciones miembro

Construye un objeto any.
(función miembro pública) [editar]
Asigna un objeto any.
(función miembro pública) [editar]
Destruye un objeto any.
(función miembro pública) [editar]
Modificadores
Cambia el objeto contenido, construyendo el nuevo objeto directamente.
(función miembro pública) [editar]
Destruye el objeto contenido.
(función miembro pública) [editar]
Intercambia dos objetos any.
(función miembro pública) [editar]
Observadores
Comprueba si el objeto mantiene un valor.
(función miembro pública) [editar]
Devuelve el typeid del valor contenido.
(función miembro pública) [editar]

[editar] Funciones no miembro

{{dsc tfun | cpp/utility/any/make_any| Crea un objeto any}.
Especializa el algoritmo std::swap.
(función) [editar]
(C++17)
Acceso de tipo seguro al objeto contenido.
(plantilla de función) [editar]

[editar] Clases asistentes

Excepción lanzada por las formas de any_cast que devuelven valor cuando no ocurre una coincidencia de tipo.
(clase) [editar]

[editar] Ejemplo

#include <any>
#include <iostream>
 
int main()
{
    std::cout << std::boolalpha;
 
    // tipo any
    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 mala
    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 = 1;
    if (a.has_value())
    {
        std::cout << a.type().name() << '\n';
    }
 
    // reiniciar
    a.reset();
    if (!a.has_value())
    {
        std::cout << "sin valor\n";
    }
 
    // pointer to contained data
    a = 1;
    int* i = std::any_cast<int>(&a);
    std::cout << *i << "\n";
}

Posible salida:

i: 1
d: 3.14
b: true
bad any_cast
i
sin valor
1