Я бы хотел управлять группой объектов классов, полученных из общего интерфейса, в общем контейнере.
Чтобы проиллюстрировать проблему, скажем, я создаю игру, которая будет содержать разных актеров. Давайте назовем интерфейс IActor
и получим Enemy
и Civilian
из него.
Теперь идея состоит в том, чтобы мой основной цикл игры мог сделать это:
// somewhere during init
std::vector<IActor> ActorList;
Enemy EvilGuy;
Civilian CoolGuy;
ActorList.push_back(EvilGuy);
ActorList.push_back(CoolGuy);
и
// main loop
while(!done) {
BOOST_FOREACH(IActor CurrentActor, ActorList) {
CurrentActor.Update();
CurrentActor.Draw();
}
}
... или что-то в этом роде. Этот пример, очевидно, не сработает, но именно по этой причине я спрашиваю здесь.
Я хотел бы знать: каков наилучший, самый безопасный и высокоуровневый способ управления этими объектами в общем гетерогенном контейнере? Я знаю о множестве подходов (Boost :: Any, void *, класс обработчика с boost :: shared_ptr, Boost.Pointer Container, dynamic_cast), но я не могу решить, какой путь будет здесь идти.
Также я хотел бы подчеркнуть, что я хочу держаться подальше от ручного управления памятью или вложенных указателей.
Помощь высоко ценится:).