Получение имени производного класса программным способом

Я пытаюсь сделать что-то вроде:

class Base {
public:
   Base() {
      cout << typeid(*this).name() << endl;
   }
   ...
};

class Derived : public Base { ... }
class MoreDerived : public Derived { ... }

Derived d;
MoreDerived m;

Проблема в том, что я всегда получаю Base , выводимую на экран, когда мне нужно увидеть Derived и MoreDerived . Есть ли способ заставить typeid работать таким образом с производными классами? Или есть другой подход, помимо typeid ?

Примечание: Я добавляю функциональность в уже закодированный набор, поэтому я не хочу добавлять виртуальный метод в базовый класс, где производные классы сами возвращают это значение. Кроме того, не беспокоясь о накладных расходах времени выполнения, это будет частью переключателя отладочной компиляции.

16
задан Cœur 2 November 2018 в 12:15
поделиться