Daily bit(e) C++. Оператор typeid, std::type_info
Добавлено 29 июля 2023 в 17:10
Daily bit(e) C++ #200, инструменты определения типа и информации о нем во время выполнения: typeid
и std::type_info
.
Оператор typeid
может применяться к типам и выражениям, он возвращает ссылку на объект std::type_info
, представляющий тип (выражения).
Применительно к полиморфным типам (за исключением создания и уничтожения), оператор typeid
вычислит и вернет динамический тип этого выражения.
#include <iostream>
#include <typeinfo>
// Получить имя, зависящее от реализации, для указанного типа:
std::string_view int_name = typeid(int).name();
// Для GCC: "i"
// То же самое для выражения:
std::string_view double_name = typeid(3+2.1).name();
// Для GCC: "d"
struct Base {
virtual void make_me_polymorphic() {}
};
struct Derived : Base {};
void inspector(Base& b) {
// Base - полиморфный тип (содержит виртуальный метод)
if (typeid(b) == typeid(Base)) {
std::cout << "Called with Base.\n";
} else {
std::cout << "Called with Derived.\n";
}
}
Base x;
inspector(x); // напечатает: "Called with Base"
Derived y;
inspector(y); // напечатает: "Called with Derived"
Открыть пример на Compiler Explorer.