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

std::type_index

Материал из cppreference.com
< cpp‎ | types
 
 
 
Поддержка типов
Основные типы
Оригинал:
Basic types
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Основные типы
Исправлены типы целых ширину (C++11)
Числовые пределы
Оригинал:
Numeric limits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
С числовым ограничивает интерфейс
Время тип информации
Оригинал:
Runtime type information
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип черты
Оригинал:
Type traits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Первичные категории типа
Оригинал:
Primary type categories
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип свойства
Оригинал:
Type properties
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Поддерживаемые операции
Оригинал:
Supported operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Отношения собственности и запросов
Оригинал:
Relationships and property queries
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип модификаций
Оригинал:
Type modifications
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип преобразования
Оригинал:
Type transformations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Характеристики типов констант
Оригинал:
Type trait constants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
 
 
Defined in header <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

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

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