std::type_index
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <typeindex>
|
||
class type_index; |
(desde C++11) | |
La clase type_index es una clase de envoltura alrededor de un objeto std::type_info, que puede utilizarse como subíndice en contenedores asociativos y asociativos no ordenados.
La relación con el objeto type_info se mantiene mediante un puntero, y por lo tanto,
type_index es CopyConstructible y CopyAssignable.
Funciones miembro
Construye el objeto Original: constructs the object The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro pública) | |
(destructor) (implícitamente declarado) |
Destruye el objeto type_index. (función miembro pública) |
operator= (implícitamente declarado) |
Asigna un objeto type_index. (función miembro pública) |
| Compara los objetos std::type_info subyacentes. (función miembro pública) | |
| Devuelve el código hash. (función miembro pública) | |
| Devuelve el nombre del tipo definido por la implementación, asociado con el objeto type_info subyacente. (función miembro pública) |
Clases asistentes
(C++11) |
Apoyo de generación de dispersión para std::type_index. (especialización de plantilla de clase) |
Ejemplo
El siguiente programa es un ejemplo de una asignación eficiente de tipo-valor.
Ejecuta este código
#include <iostream>
#include <typeinfo>
#include <typeindex>
#include <unordered_map>
#include <string>
#include <memory>
struct A {
virtual ~A() {}
};
struct B : A {};
struct C : A {};
int main()
{
std::unordered_map<std::type_index, std::string> type_names;
type_names[std::type_index(typeid(int))] = "int";
type_names[std::type_index(typeid(double))] = "double";
type_names[std::type_index(typeid(A))] = "A";
type_names[std::type_index(typeid(B))] = "B";
type_names[std::type_index(typeid(C))] = "C";
int i;
double d;
A a;
// observa que almacenamos un puntero al tipo A
std::unique_ptr<A> b(new B);
std::unique_ptr<A> c(new C);
std::cout << "i es " << type_names[std::type_index(typeid(i))] << '\n';
std::cout << "d es " << type_names[std::type_index(typeid(d))] << '\n';
std::cout << "a es " << type_names[std::type_index(typeid(a))] << '\n';
std::cout << "b es " << type_names[std::type_index(typeid(*b))] << '\n';
std::cout << "c es " << type_names[std::type_index(typeid(*c))] << '\n';
}
Salida:
i es int
d es double
a es A
b es B
c es C
Véase también
| Contiene la información de algún tipo generada por la implementación. Esta es la clase devuelta por el operador typeid. (clase) |