我有,對於大多數STL容器一起工作了 '的foreach' 宏我用C經常使用++:「的foreach值」 宏GCC和CPP
#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宏的其他實例發生衝突。如果我可以將當前行號加後綴到迭代器變量名稱,它會起作用,但我不知道該怎麼做。
完美!但我不明白製作額外物體的一點意思。 var是一個指針。你有沒有使用過價值的早期版本?並且var可以作爲另一個(最內層)循環的引用:for(typeof(...)var = * ptr; ptr; ptr = NULL)。謹慎更新? – sfink 2008-09-17 17:46:27