С++ для начинающих



         

Класс type_info


Точное определение класса type_info зависит от реализации, но некоторые его характерные черты остаются неизменными в любой программе на C++:

class type_info {

   // представление зависит от реализации

private:

   type_info( const type_info& );

   type_info& operator= ( const type_info& );

public:

   virtual ~type_info();

   int operator==( const type_info& );

   int operator!=( const type_info& );

   const char * name() const;

};

Поскольку копирующие конструктор и оператор присваивания – закрытые члены класса type_info, то пользователь не может создать его объекты в своей программе:

#include <typeinfo>

type_info t1;  // ошибка: нет конструктора по умолчанию

               // ошибка: копирующий конструктор закрыт

type_info t2 (typeid( unsigned int ) );

Единственный способ создать объект класса type_info – воспользоваться оператором typeid.

В классе определены также операторы сравнения. Они позволяют сравнивать два объекта type_info, а следовательно, и результаты, возвращенные двумя операторами typeid. (Мы говорили об этом в предыдущем подразделе.)

typeid( re )  == typeid( manager )     // истинно

typeid( *pe ) != typeid( employee )    // ложно

Функция name() возвращает C-строку с именем типа, представленного объектом type_info. Этой функцией можно пользоваться в программах следующим образом:

#include <typeinfo>

int main() {

   employee *pe = new manager;

   // печатает: "manager"

   cout << typeid( *pe ).name() << endl;

}

Для работы с функцией-членом name() нужно включить заголовочный файл <typeinfo>.

Имя типа – это единственная информация, которая гарантированно возвращается всеми реализациями C++, при этом используется функция-член name() класса type_info. В начале этого раздела упоминалось, что поддержка RTTI зависит от реализации и иногда в классе type_info бывают дополнительные функции-члены. Чтобы узнать, каким образом обеспечивается поддержка RTTI в вашем компиляторе, обратитесь к справочному руководству по нему. Кроме того, можно получить любую информацию, которую компилятор знает о типе, например:




Содержание  Назад  Вперед