我有一个在 C++ 中经常使用的“foreach”宏,它适用于大多数 STL 容器:
#define foreach(var, container) \
for(typeof((container).begin()) var = (container).begin(); \
var != (container).end(); \
++var)
(请注意,'typeof' 是 gcc 扩展。)它的使用如下:
std::vector< Blorgus > blorgi = ...;
foreach(blorgus, blorgi) {
blorgus->draw();
}
我想做一些类似的东西来迭代地图的值。也许称它为“foreach_value”。所以不要写
foreach(pair, mymap) {
pair->second->foo();
}
我会写
foreach_value(v, mymap) {
v.foo();
}
我想不出一个可以做到这一点的宏,因为它需要声明两个变量:迭代器和值变量(上面的'v')。我不知道如何在 for 循环的初始化程序中执行此操作,即使使用 gcc 扩展也是如此。我可以在 foreach_value 调用之前声明它,但是它会与同一范围内的 foreach_value 宏的其他实例发生冲突。如果我可以将当前行号作为迭代器变量名称的后缀,它会起作用,但我不知道该怎么做。