
The Dude wrote:
Eric Niebler wrote:
Why not:
int index = 0;
BOOST_FOREACH(const Foo &f, foos) { // ... stuff ... ++index; }
?
Thanks for you answer. I'm not sure how to answer the "why not"? The code you write certainly will work, but so would the predecessor to BOOST_FOREACH in the first place, no? So here's my attempt: 1. For shorter loops, this changes 2 LOCs to 5.
So put it all on one line! Kidding. ;-)
2. For longer loops, the iteration code changes its meaning if it appears before the ++index or after. 3. The variable index has scope outside the loop. 4. Other people think so, e.g., the author's of D language http://en.wikipedia.org/wiki/D_(programming_language)#Example_1 It's true that none of these points is really a proof. Still, I'd be really happy to hack my own INDEX_FOREACH, but the 500+ LOCs of BOOST_FOREACH left me daunted.
This is true, but I'm not convinced. What value BOOST_FOREACH has comes primarily from its ability to simplify something that's already pretty darn simple -- a plain for(;;) loop. I strongly resist any effort to make BOOST_FOREACH more complicated, unless the wins are truly significant. In this case, I don't think they are. -- Eric Niebler BoostPro Computing http://www.boostpro.com