私は Visual Studio 2010 を使用しています。私が使用したい機能の 1 つは、VS2010 には含まれていませんが、VS2012 に含まれているのは、範囲ベースの for ループです。
VS2012 では、次のようなきちんとした非常にきちんとした for ループを実行できます。
for( auto& it: myElements )
it->something();
これまでのところ、VS2010 で得られる最も近いものは次の構文です。
for( auto it = myElements.begin(), end = myElements.end(); it != end; it++ )
it->something();
関連する質問をいくつか読んだところ、boost\foreach を使用して次のマクロにアクセスできることがわかりました。
BOOST_FOREACH( auto it, myElements ){
it.something();
}
このメソッドに関する私の問題は、ポインタではなくコピー(または同様のもの)を提供することです。ここで私は混乱します。foreach リファレンスには次のように書かれています。
動的な割り当てを行わず、仮想関数の呼び出しや関数ポインターを介した呼び出しを行わず、コンパイラのオプティマイザーに対して透過的でない呼び出しも行いません。
どういう意味ですか?コピペじゃないの?
BOOST_FOREACH からポインタを取得するにはどうすればよいですか? または、他のブースト機能を使用する必要がありますか?
ここの他の質問でこの構文を見ました:
BOOST_FOREACH( auto& it, myElements ){
it->something();
}
ただし、これはコンパイルされず、エディターでエラーがスローされます。これの何が問題なのですか?ここで他の多くの質問で有効なコードだとわかったのはなぜですか?
VS2010 には、範囲ベースの for ループのためのきちんとした解決策はありますか? (ブースト使用含む)