Visual C ++ «для каждого» не является стандартным C ++, то есть вы не сможете скомпилировать свой код на других компиляторах, таких как g ++. Тем не менее, STL предлагает std :: for_each , но его синтаксис гораздо менее интуитивно понятен. Вот его прототип:
template <class InputIterator, class UnaryFunction>
UnaryFunction for_each(InputIterator first, InputIterator last, UnaryFunction f);
Требуется два итератора, определяющих допустимый диапазон, и применяется унарная функция (или функтор) f к каждому объекту в этом диапазоне.
Вы можете переписать свой пример, используя std :: for_each, например так:
void foo(Object o)
{
o.foo();
}
...
list<Object> myList;
std::for_each(myList.begin(), myList.end(), foo);
Однако, если вы хотите оставаться близким к классическому синтаксису для каждой конструкции, и если вы не против использования Boost, вы можете использовать BOOST.FOREACH , что позволит вам написать
list<Object> myList;
BOOST_FOREACH(Object o, myList)
{
o.foo();
}