我想管理從共同容器中的共享接口類派生的類的一堆對象。將通用接口派生的類的對象存儲在公共容器中的最安全方法是什麼?
爲了說明問題,假設我正在構建一個包含不同演員的遊戲。我們稱之爲接口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