c++ - 为什么 map 上的 BOOST_FOREACH 仅适用于 typedef

标签 c++ boost boost-foreach

我试图通过 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)
{
}

最佳答案

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

关于c++ - 为什么 map 上的 BOOST_FOREACH 仅适用于 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481144/

相关文章:

c++ - 将 BOOST_FOREACH 替换为 "pure"C++11 替代方案?

c++ - 转置矩阵的内存黑客破坏堆栈,C++

c++ - 如何覆盖qt中的标签宽度?

c++ - 在没有 C++14 的情况下定义模板常量的正确方法?

c++ - 'parse': 不是 boost::spirit::x3::unused_type 的成员

c++ - 如何将 BOOST_FOREACH 与仅支持 const_iterator 的容器一起使用?

c++ - 在具有异常处理的函数中返回一个类

c++ - 每次使用不同的 fixture 多次执行一个测试用例

java - solr boost函数的目的

c++ - 使用 BOOST_FOREACH 遍历目录中的所有文件