Получение имени класса c ++ программным путем

StackOverflow https://stackoverflow.com/questions/1024648

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне было интересно, возможно ли в C ++ получить имя класса в строковой форме без необходимости жесткого кодирования его в переменную или метод получения. Мне известно, что эта информация фактически не используется во время выполнения, поэтому она недоступна, но можно ли создать макросы для создания этой функциональности?

Изменить. Может быть полезно отметить, что я на самом деле пытаюсь получить имя производного класса и использую Visual C ++ 2008 Express Edition.

Это было полезно?

Решение

Вы можете использовать typeid :

#include <typeinfo>
cout << typeid(obj).name() << endl;

Однако это не рекомендуется, поскольку формат не стандартизирован и может различаться в разных компиляторах (или даже в разных версиях одного и того же компилятора).

Другие советы

Если вы просто хотите проверить, является ли это определенный класс, то

typeid(obj) == typeid(CSubClass)

всегда будет работать независимо от реализаций.

В противном случае удобным способом является объявление:

virtual const char* classname() { return "CMyClass";}

и реализовать для каждого подкласса.

Элемент typeid (obj) .name () всегда дает тип переменной в том виде, в котором она была объявлена, а не фактический тип (класс) объекта. Если переменная obj назначена экземпляру подкласса класса, для которого obj был объявлен, typeid, к сожалению, этого не раскрывает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top