2014-01-18 77 views
0

在我的課unordered_map我有這樣的soundmap迭代通過使用BOOST_FOREACH

class SoundSubSystem 
{ 
private: 
    boost::unordered_map<string, ISoundEngine*> soundmap; 
.... 
}; 

但如何通過它使用BOOST_FOREACH迭代?

SoundSubSystem::~SoundSubSystem() 
{ 
    BOOST_FOREACH(/*?*/ item, soundmap) { 
     item.second->drop(); 
    } 
}; 

應該item有什麼樣的價值類型?

+0

只是作爲一個建議,考慮你的編譯器升級到提供C++ 11的支持版本,並使用基於範圍的'for'循環:'的(汽車及項目:soundmap){item.second-> drop(); }'。 –

+0

我正在使用visual studio 2010--據我所知它不支持C++ 11 – lapots

+1

事實上,它不支持C++ 11的基於範圍的for循環,但它支持'auto'。所以你可以這樣做:'BOOST_FOREACH(auto&item,soundmap){item.second-> drop(); }'。 –

回答

2

試試這個: -

typedef boost::unordered_map<string, ISoundEngine*> myhash; 

BOOST_FOREACH(myhash::value_type& item, soundmap) { 
     item.second->drop(); 
    } 
+0

它不起作用。 '類型名稱是不允許的' – lapots

+0

@ user1432980你可以用'typename'關鍵字來試試它。我想知道'BOOST_FOREACH'宏是否可能需要這種類型。或者可以使用'auto',如 – P0W

+3

中的一個建議。恐怕這裏的問題是將'string'與'ISoundEngine *'分開的逗號。請記住'BOOST_FOREACH'是一個宏,因此'',ISoundEngine * ...'部分可能會被解釋爲第二個參數 - 我想。而是使用'BOOST_FOREACH(auto&item,soundmap)'或者如果你真的想用C++ 03的方式,可以爲boost :: unordered_map 或boost :: unordered_map定義一個'typedef'宏之外的 :: value_type'。 –