std::any
De cppreference.com
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 con un constructor de copia.
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 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) | |
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 | |
Comprueba si el objeto mantiene un valor. (función miembro pública) | |
Devuelve el typeid del valor contenido. (función miembro pública) |
[editar] Funciones no miembro
(C++17) |
Especializa el algoritmo std::swap. (función) |
(C++17) |
Acceso de tipo seguro al objeto contenido. (plantilla de función) |
(C++17) |
Crea un objeto any . (plantilla de función) |
[editar] Clases auxiliares
(C++17) |
Excepción lanzada por las formas de any_cast que devuelven valor cuando no ocurre una coincidencia de tipo. (clase) |
[editar] Ejemplo
Ejecuta este código
#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"; } // puntero a datos contenidos 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