std::any
De es.cppreference.net
< cpp | utilidades
| 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
|
(C++17)
|
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
|
(C++17)
|
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
Ejecutar este código
#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) |
|
(C++23)
|
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) |
|
(C++26)
|
un envoltorio polimórfico que contiene un objeto asignado dinámicamente con semántica de valor
(plantilla de clase) |