Boost logo

Boost Users :

From: Dave Steffen (dgsteffen_at_[hidden])
Date: 2006-09-18 13:58:11


Sebastian Redl writes:
>
> On Mon, September 18, 2006 12:52 pm, Rob Caldecott wrote:
>
> > Can the pair be declared without a typedef? Is this a limitation of the
> > MS
> > compiler?
>
> It is a limitation of the preprocessor. It does not recognize <> as any
> sort of parentheses, so it thinks the , separating the template parameters
> is a macro argument separator.
>
> You can try wrapping the whole argument in parentheses:
> BOOST_FOREACH((std::pair<int, int> p), m)
>
> But I'm not sure if the PP passes the parentheses on - in that case, you
> might get syntax errors in the generated code. If that's the case, you'll
> have to use the typedef.

 I've done something like this:

#include "boost/tuple/tuple.hpp"

#define FOREACH_PAIR( KEY, VAL, COL) FOREACH (boost::tie(KEY,VAL),COL)

// and then, for example

int key, value;

FOREACH_PAIR(key, value m);

It's not perfect; specfically, I don't think that you can write into
the map this way. I suspect there _is_ a way for that to work, I just
haven't figured it out yet. :-)

I'd like the eventual "official" FOREACH to have some additional
variations like this...

----------------------------------------------------------------------
Dave Steffen, Ph.D.
Software Engineer IV Disobey this command!
Numerica Corporation - Douglas Hofstadter
dgsteffen at numerica dot us


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net