Я считаю макрос Boost немного громоздким.
Вот моя попытка:
#include <boost/typeof/typeof.hpp>
#define FOR_EACH(cont, iter) \
for (BOOST_TYPEOF(cont)::const_iterator iter = cont.begin(), e = cont.end(); \
iter != e; \
++iter)
Работает для стандартных контейнеров.
Используется так:
vector<int> vi;
// ...
FOR_EACH(vi, i)
cout << *i;
Поддерживает вложение:
map<string, list<int> > msli;
msli["key1"].push_back(1);
msli["key1"].push_back(2);
msli["key2"].push_back(3);
msli["key2"].push_back(4);
FOR_EACH(msli, i) {
cout << i->first << endl;
FOR_EACH(i->second, j)
cout << "\t" << *j << endl;
}
/*
Prints:
key1
1
2
key2
3
4
*/
Источник: http: /wtw.tw/papers/foreach.html