Я хотел бы управлять кучей объектов классов, полученных из общего класса интерфейса в общем контейнере.Что было бы самым безопасным способом хранения объектов классов, полученных из общего интерфейса в общем контейнере?
Чтобы проиллюстрировать эту проблему, допустим, что я создаю игру, в которой будут находиться разные актеры. Назовем интерфейс 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), но я не могу решить, каким будет путь сюда.
Также я хотел бы подчеркнуть, что я хочу держаться подальше от ручного управления памятью или вложенных указателей.
Помогите оценить!
понравилось, как вы использовали for_each –
Можете ли вы объяснить свой for_each и как использовать его с помощью BOOST_FOREACH? – Svenstaro
std :: for_each (I1, I2, Action).Применяет действие ко всем значениям (в этом случае вызывает метод updateDraw) в диапазоне между I1 и I2 (не включая I2). Где I1, I2 - итераторы. См.: Http://www.sgi.com/tech/stl/for_each.html –