std:: any
From cppreference.net
|
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
|
(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) |