为什么BOOST_FOREACH只能在map上使用typedef才能正常工作

5

我尝试编写一个简单的循环遍历map<int, int>元素,我想知道为什么我使用的第一种语法不起作用/无法编译?

我编写的第一个版本如下,在VS'2008 / boost版本1.44中无法编译:

std::map<int, int> myMap;
...
BOOST_FOREACH(map<int, int>::value_type &p, myMap)
{
}

现在,如果我像下面这样重新编写代码,编译就没问题了,但为什么呢?
typedef std::map<int, int> myMap_t;
myMap_t myMap;
...
BOOST_FOREACH(myMap_t::value_type &p, myMap)
{
}

你考虑过使用C++11的auto吗?http://en.cppreference.com/w/cpp/language/range-for和https://dev59.com/cGQn5IYBdhLWcg3wLkrL - Antonio
1个回答

12

这是一个预处理器宏,它不喜欢 map<int, int> 中的 ,


1
@GIJoe 是的,你链接的答案使用了 map 的 typedef,因此它不包含逗号“,”。 - Angew is no longer proud of SO
@Angew:啊,没注意到。好发现。 - Engineer2021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接