Я хочу, чтобы несколько классов наследовали от этого интерфейса:
class IPlayer {
public:
virtual ~IPlayer() {}
virtual void doSomething() = 0;
protected:
std::string m_name;
};
Вот класс, который должен наследовать от вышеупомянутого:
class Jack : public IPlayer {
public:
Jack(std::string t_name)
{
m_name = t_name;
}
~Jack() { }
void doSomething()
{
/* do a bunch of stuff */
}
};
Имейте в виду, что у нас есть другие классыкоторые наследуют от IPlayer
таким же образом, например Bob
и Alice
.
Теперь, скажем, я хотел создать контейнер для Jack
s, Bob
s и Alice
s, которые позволили бы мне перегруппировать их в одну переменную.В этом состоянии это невозможно для меня, так как у IPlayer нет ctor, поэтому он не может служить шаблоном для таких объектов, как векторы или списки.(По крайней мере, это мое понимание)
Было бы лучше иметь класс между IPlayer
и Jack
, который бы реализовывал только ctor и dtor, а затем оставлял бы другие методы чисто виртуальными для использования
ИЛИ
Заставить IPlayer
(и / или любой будущий интерфейс) наследовать от того же класса, что и выше, который реализует только ctor и dtor только длясделать IPlayer
ctorable для контейнеров?