我想管理一堆从公共容器中的共享接口类派生的类对象。
为了说明这个问题,假设我正在构建一个包含不同演员的游戏。让我们调用接口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),但我无法决定哪种方法可以去这里。
另外我想强调的是,我想尽可能远离手动内存管理或嵌套指针。
非常感谢帮助:)。