Мой C++ немного ржавый. Вот что я пытаюсь сделать:C++ RTTI и производные классы
class Cmd { };
class CmdA : public Cmd { };
class CmdB : public Cmd { };
...
Cmd *a = new CmdA();
Cmd *b = new CmdB();
Первая проблема:
cout << typeid (a).name()
cout << typeid (b).name()
как возвращение Cmd * типы. Мой желаемый результат - CmdA * и CmdB *. Любой способ выполнения этого, кроме:
if (dynamic_cast <CmdA *> (a)) ...
Во-вторых, я хотел бы сделать что-то вроде этого:
class Target {
public:
void handleCommand (Cmd *c) { cout << "generic command..." }
void handleCommand (CmdA *a) { cout << "Cmd A"; }
void handleCommand (CmdB *b) { cout << "Cmd B"; }
};
Target t;
t.handleCommand (a);
t.handleCommand (b);
и получить выход "Cmd A" и "B Cmd". Сейчас он печатает «generic command ...» дважды.
Благодаря
Ahh да. Еще одна вещь, которую мне не хватало, заключалась в том, чтобы иметь хотя бы одну виртуальную функцию в Cmd. virtual ~ Cmd() {} – Shaun