ほとんどの STL コンテナーで機能する C++ で頻繁に使用する「foreach」マクロがあります。
#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」) の 2 つの変数を宣言する必要があるため、これを実行するマクロを思い付くことができません。gcc 拡張機能を使用しても、for ループの初期化子でそれを行う方法がわかりません。foreach_value 呼び出しの直前に宣言することもできますが、同じスコープ内の foreach_value マクロの他のインスタンスと競合します。現在の行番号をイテレータ変数名の末尾に付けることができれば機能しますが、その方法がわかりません。