Мой C ++ немного ржавый. Вот что я пытаюсь сделать:
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» и «Cmd B». Сейчас распечатывает
"общая команда ..." дважды.
Спасибо