我想管理从共同容器中的共享接口类派生的类的一堆对象。将通用接口派生的类的对象存储在公共容器中的最安全方法是什么?
为了说明问题,假设我正在构建一个包含不同演员的游戏。我们称之为接口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的方式 – 2010-03-22 17:37:28
你能解释一下你的for_each以及如何使用BOOST_FOREACH来使用它吗? – Svenstaro 2010-03-23 03:08:48
std :: for_each(I1,I2,Action)。将Action应用于I1和I2(不包括I2)范围内的所有值(在本例中调用方法updateDraw)。 I1,I2是迭代器。请参阅:http://www.sgi.com/tech/stl/for_each.html – 2010-03-23 14:55:04