Visual C++ の "for each" は標準の C++ ではありません。つまり、g++ などの他のコンパイラでコードをコンパイルすることはできません。ただし、STL はstd::for_eachを提案していますが、その構文は直感的ではありません。そのプロトタイプは次のとおりです。
template <class InputIterator, class UnaryFunction>
UnaryFunction for_each(InputIterator first, InputIterator last, UnaryFunction f);
有効な範囲を定義する 2 つの反復子を取り、単項関数 (またはファンクター) f をこの範囲内の各オブジェクトに適用します。次のように std::for_each を使用して例を書き直すことができます。
void foo(Object o)
{
o.foo();
}
...
list<Object> myList;
std::for_each(myList.begin(), myList.end(), foo);
ただし、 for each コンストラクトの従来の構文に近づきたい場合、および Boost の使用に問題がない場合は、BOOST.FOREACHを使用できます。
list<Object> myList;
BOOST_FOREACH(Object o, myList)
{
o.foo();
}