[Geany-Devel] Let's move to C++98 - iteration

Nick Treleaven nick.treleaven at xxxxx
Thu Sep 5 09:57:17 UTC 2013


On 01/09/2013 03:53, Matthew Brush wrote:
> On 13-08-31 07:42 PM, Lex Trotman wrote:
>>> Just for fun I wrote some theoretical code that could be used in a
>>> program
>>> like Geany to compare styles between various C's and C++'s (note:
>>> none of
>>> it tested).
>>>
>>> http://pastebin.geany.org/**gYFMO/ <http://pastebin.geany.org/gYFMO/>
>>
>>
>>
>> As discussed on IRC here's another way of doing the C++98/03, marked with
>> +es. http://pastebin.geany.org/AzbMV/
>>
>
> Or alternatively in c++11 :)
>
> for_each(begin(App::instance().windows()),
>           end(App::instance().windows()),
>           [] (Window &win) {
>             for_each(begin(win.documents()),
>                      end(win.documents(),
>                      [] (Document &doc) {
>                        // do stuff with each document
>                      }
>              );
>           }
> );

Still somewhat noisy IMO. How about this, C++98 (I think):

#include <boost/foreach.hpp>
#define FOREACH BOOST_FOREACH

FOREACH(Document &doc, win.documents())
{
     // do stuff with each document
}

See:
http://www.boost.org/doc/libs/1_54_0/doc/html/foreach.html

"BOOST_FOREACH is designed for ease-of-use and efficiency. It does no 
dynamic allocations, makes no virtual function calls or calls through 
function pointers, and makes no calls that are not transparent to the 
compiler's optimizer. This results in near-optimal code generation; the 
performance of BOOST_FOREACH is usually within a few percent of the 
equivalent hand-coded loop. And although BOOST_FOREACH is a macro, it is 
a remarkably well-behaved one. It evaluates its arguments exactly once, 
leading to no nasty surprises."


More information about the Devel mailing list