Daily bit(e) C++. Оператор typeid, std::type_info

Добавлено 29 июля 2023 в 17:10

Daily bit(e) C++ #200, инструменты определения типа и информации о нем во время выполнения: typeid и std::type_info.

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.

Теги

C++ / CppDaily bit(e) C++Программирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.