У меня есть иерархия классов, базовый класс, имеющий функцию, чтобы напечатать имя класса:Можно ли прикрепить имя к классу runtime в C++?
#include <iostream>
using namespace std;
class base
{
public:
virtual void print_name() { cout << typeid(*this).name() << endl; };
};
class derived1 : public base { };
class derived2 : public base { };
int main()
{
base Base;
Base.print_name();
derived1 Derived1;
Derived1.print_name();
derived2 Derived2;
Derived2.print_name();
}
Выход из выше
class base
class derived1
class derived2
, который, по сути, зависят от платформы.
Есть ли более или менее стандартный способ «прикрепить» к каждому классу уникальное имя, поэтому его можно использовать в printname()
, делая вывод одинаковым для всех платформ (и независимо от изменений, внесенных в имена реальных классов) ?
просто глупый вопрос: во сколько зависит эта платформа? – Walter
Очень. Например, gcc не включает слово «класс» в результат (и может добавить что-то еще). В стандарте говорится: «Имена, правило кодирования и последовательность сортировки для типов все неопределенные и могут различаться между программами». –