迭代通过使用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
有什么样的价值类型?
试试这个: -
typedef boost::unordered_map<string, ISoundEngine*> myhash;
BOOST_FOREACH(myhash::value_type& item, soundmap) {
item.second->drop();
}
它不起作用。 '类型名称是不允许的' – lapots
@ user1432980你可以用'typename'关键字来试试它。我想知道'BOOST_FOREACH'宏是否可能需要这种类型。或者可以使用'auto',如 – P0W
中的一个建议。恐怕这里的问题是将'string'与'ISoundEngine *'分开的逗号。请记住'BOOST_FOREACH'是一个宏,因此'',ISoundEngine * ...'部分可能会被解释为第二个参数 - 我想。而是使用'BOOST_FOREACH(auto&item,soundmap)'或者如果你真的想用C++ 03的方式,可以为boost :: unordered_map
只是作为一个建议,考虑你的编译器升级到提供C++ 11的支持版本,并使用基于范围的'for'循环:'的(汽车及项目:soundmap){item.second-> drop(); }'。 –
我正在使用visual studio 2010--据我所知它不支持C++ 11 – lapots
事实上,它不支持C++ 11的基于范围的for循环,但它支持'auto'。所以你可以这样做:'BOOST_FOREACH(auto&item,soundmap){item.second-> drop(); }'。 –