迭代通过使用BOOST_FOREACH

问题描述:

在我的课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(); }'。 –

试试这个: -

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'。 –