Я хотел бы управлять кучей объектов классов, полученных из класса общего интерфейса в общем контейнере.
Чтобы проиллюстрировать проблему, предположим, что я создаю игру, в которой будут разные актеры. Назовем интерфейс 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, dynamic_cast), но я не могу решить, какой из них выбрать.
Также я хотел бы подчеркнуть, что я хочу держаться как можно дальше от ручного управления памятью или вложенных указателей.
Помощь очень ценится :).