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


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

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

3 53

3 ответа:

можно использовать typeid:

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

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

typeid(obj) == typeid(CSubClass)

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

в противном случае, удобный способ-это объявить:

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

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

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