どれがいいだろう…。 "本の虫: range-based forに対する意見求む" http://cpplover.blogspot.com/2011/02/range-based-for.html
2011-02-27 20:52:05ただ、その場合は配列の扱いをどうするかを考える必要がある。規格で配列は例外のルールを作るべきか、それとも標準ライブラリにアダプタを用意するか、ですね。
2011-02-27 20:55:22案4はユーザにとっても言語にとってもとてもシンプルだと思う。でも,アダプタを書くだけで本当に全てのケースに対応できるのか分からない。(他の案もそういう意味では分からないんだけど)
2011-02-27 20:56:53確かに… RT: @SubaruG: ただ、その場合は配列の扱いをどうするかを考える必要がある。規格で配列は例外のルールを作るべきか、それとも標準ライブラリにアダプタを用意するか、ですね。
2011-02-27 21:03:13うーん、range-based for はなかなか興味深いにゃー。ライトなC++er だとやっぱり案1が一番理解しやすいのかにゃー。
2011-02-27 21:07:37既存コードが ADL ありきで動いている以上、ADL のサポートを将来外すという選択はそもそも採れない..んじゃないかな。
2011-02-27 21:08:07本の虫: range-based forに対する意見求む http://t.co/RL0g0tG ← 案4がいいに賛同。ADLの邪悪はさておくにしても、簡潔で明瞭で使い易く、また他の案に対して言語仕様の学習コストも考慮するにデメリットもない
2011-02-27 21:08:42range based forからADLを消したところで結局ADLは残ってるわけだし案1かfall-backはあっていいと思うんだけどな
2011-02-27 21:12:11あ、ちなみに現行では、 <iterator> に配列に対して特殊化された begin, end が定義されてます。
2011-02-27 21:14:19多分現状is_iterator<T>メタ関数を書くとしたらstd::iterator_traits<T>::iterator_tagが定義されてるかってことだろうけどis_range<T>を書くとしたら・・・ってなってしまうのが良くない
2011-02-27 21:16:23確かにADLはこの場合邪魔でしかない気がするので案4が良いかなあ、とは思った。個人的には案2が良い気もしたけどSTLテンプレートの特殊化はなあ。
2011-02-27 21:17:50ちなみに現行の規格において <iterator> に定義された、コンテナに対する begin, end は、 perfect forward を使った template<class T> some_type begin( T&& x ); がある場合、そちらが優先される筈。
2011-02-27 21:18:33しかし、ユーザ側に選択肢を増やすのもなんかあれな気がする。複数定義した場合に混乱しやすいし。ぐぬぬ……。
2011-02-27 21:19:08