Ежедневный бит (е) C ++ # 200, Инструменты запросов и информации о типах во время выполнения: typeid и std:: type_info.
Оператор typeid может применяться к типам и выражениям и возвращает ссылку на объект std::type_info, представляющий тип (выражения).
При применении к полиморфным типам (за исключением процессов построения и уничтожения) оператор typeid вычисляет выражение и возвращает динамический тип выражения.
#include <iostream> #include <typeinfo> // Get an implementation defined name of this type: std::string_view int_name = typeid(int).name(); // On GCC: "i" // Same for an expression: std::string_view double_name = typeid(3+2.1).name(); // On GCC: "d" struct Base { virtual void make_me_polymorphic() {} }; struct Derived : Base {}; void inspector(Base& b) { // Base is a polymorphic type (constains a virtual method) if (typeid(b) == typeid(Base)) { std::cout << "Called with Base.\n"; } else { std::cout << "Called with Derived.\n"; } } Base x; inspector(x); // prints: "Called with Base" Derived y; inspector(y); // prints: "Called with Derived"
Откройте пример в Compiler Explorer.