Пространства имён
Варианты
Действия

std::type_index

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
std::type_index
Функции-элементы
Вспомогательные классы
 
Определено в заголовочном файле <typeindex>
class type_index;
(начиная с C++11)

Класс type_index является классом-оболочкой вокруг объекта std::type_info, который можно использовать в качестве индекса в ассоциативных и неупорядоченных ассоциативных контейнерах. Связь с объектом type_info поддерживается через указатель, поэтому type_index имеет вид CopyConstructible и CopyAssignable.

Содержание

[править] Функции-элементы

создаёт объект
(public функция-элемент) [править]
(деструктор)
(объявлено неявно)
уничтожает объект type_index
(public функция-элемент)
operator=
(объявлено неявно)
присваивает объект type_index
(public функция-элемент)
сравнивает базовые объекты std::type_info
(public функция-элемент) [править]
возвращает хэш-код
(public функция-элемент) [править]
возвращает определённое реализацией имя типа,
связанное с лежащим в основе объектом type_info
(public функция-элемент) [править]

[править] Вспомогательные классы

поддержка хэширования для std::type_index
(специализация шаблона класса) [править]

[править] Пример

Следующая программа приводит пример эффективного сопоставления типа и значения.

#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;
 
    // Обратите внимание, что мы храним указатель на тип A
    std::unique_ptr<A> b(new B);
    std::unique_ptr<A> c(new C);
 
    std::cout << "i является " << type_names[std::type_index(typeid(i))] << '\n';
    std::cout << "d является " << type_names[std::type_index(typeid(d))] << '\n';
    std::cout << "a является " << type_names[std::type_index(typeid(a))] << '\n';
    std::cout << "b является " << type_names[std::type_index(typeid(*b))] << '\n';
    std::cout << "c является " << type_names[std::type_index(typeid(*c))] << '\n';
}

Вывод:

i является int
d является double
a является A
b является B
c является C

[править] Смотрите также

содержит некоторую информацию о типе, сгенерированную реализацией.
Это класс, возвращаемый оператором typeid.
(класс) [править]