BOOST_FOREACH 的奇葩发现

函数形式:BOOST_FOREACH(type name, container);
用于遍历容器里面的内容,但是如果遇到map等里面自带逗号的数据结构时,就会有问题。
比如 std::vector<std::map<std::string, std::string>> container;

如果你直接这样遍历,编译器是无法通过的(可能是2008的BUG)

BOOST_FOREACH(std::map<std::string, std::string>& tmp, container)
{

}
编译器会提示这个函数参数不正确的一系列的提示,其实就是把map里面的[,]当做函数参数的分割符了,怎么解呢?这样写:

#define std::map<std::string, std::string> STDMAP;

BOOST_FOREACH(STDMAP& tmp, container)
{

}
这样写就没问题了,奇葩的编译器... OVER

猜你喜欢

转载自blog.51cto.com/11753138/2412591