今回はどこぞでみたことありそうなforeach文的な機能をfor文に実装した"Range-based for-loop"(範囲ベースのforループ)。
今までは確かに他の言語のようなforeach文の機能を使うには単純に構文レベルでの解決はできませんでした。(よね?)
(std::for_eachは存在しますが、これは構文ではなくstd名前空間で定義されている関数テンプレートです。)
そこで今回、C++0xではfor文に範囲による指定を行えるような機能が実装される予定のようです。
文法的には
for ( for-range-declaration : expression ) statement
となっているようです。例としては
std::vector<int> v = {1, 2, 3}; for (auto x : v) { std::cout << x << std::endl; }
この結果が
1 2 3
です。
ちょっと私の持っている環境では試せないので何とも言えないのですが、conceptsというものが廃止された影響で、ADLを使う必要がでたということらしいです。
つまり、for文に範囲指定をするためにオブジェクトは最初と最後のイテレータを返すbegin()とend()というメンバ関数を持っていないといけないということです。そのため、このメンバ関数を持たない場合は名前空間内で別にこのbegin()とend()を定義をしないと使えないといったものがあるようです。(その辺に関してはこのページhttp://cpplover.blogspot.com/2009/08/n2930-range-based-for-loop.htmlに書いてありました。)
うーん、これはconceptsが廃止された影響は大きいかも。
まあ、Boost使えばいいよね。(←ほぼC++0x全否定)
旧コメント: