Бьерн Страуструп - Язык программирования С++. Главы 11-13 - Расширенная динамическая информация о типе

ОГЛАВЛЕНИЕ

13.5.4 Расширенная динамическая информация о типе

В классе Type_info содержится только минимум информации, необходимой для идентификации типа и безопасных операций приведения. Но поскольку в самом классе Type_info есть функции-члены info() и get_info(), можно построить производные от него классы, чтобы в динамике определять, какие объекты Type_info возвращают эти функции. Таким образом, не меняя класса Type_info, пользователь может получать больше информации о типе с помощью объектов, возвращаемых функциями dynamic_type() и static_type(). Во многих случаях дополнительная информация должна содержать таблицу членов объекта:

           struct Member_info {
             char* name;
             Type_info* tp;
             int offset;
           };

           class Map_info : public Type_info {
              Member_info** mi;
           public:
              static const Type_info info_obj;
              virtual typeid get_info() const;
              static typeid info();

              // функции доступа
           };

Класс Type_info вполне подходит для стандартной библиотеки. Это базовый класс с минимумом необходимой информации, из которого можно получать производные классы, предоставляющие больше информации. Эти производные классы могут определять или сами пользователи, или какие-то служебные программы, работающие с текстом на С++, или сами трансляторы языка.