Namespaces
Variants

std::any

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de funcionalidades de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación tripartita
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
Definido en el encabezado <any>
class any;
(desde C++17)

La clase any describe un contenedor de tipo seguro para valores individuales de cualquier tipo copiable por copia.

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 el 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 los objetos contenidos son equivalentes.
2) Las funciones no miembro any_cast proporcionan acceso de tipo seguro al objeto contenido.

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

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)