Boost logo

Boost Users :

Subject: Re: [Boost-users] PP: commas issues
From: Philipp Moeller (philipp.moeller_at_[hidden])
Date: 2012-02-29 12:41:35


"MM" <finjulhich_at_[hidden]> writes:

> Hi,
>
> I am trying to generate a list of instances of the same template with
> different pairs of args, to populate a mpl container, with PP
>
> so, mpl::vector< tmpl<A::x,A::y>, tmpl<B::x,B::y>, tmpl<C::x, C::y> >
>
> i'm having trouble with the commas.
>
> I successfully generate the pp sequence
> (tmpl<A::x,A::y>)(tmpl<B::x,B::y>) (tmpl<C::x, C::y>)
>
> but from this to get the enumeration, it's impossible using SEQ_ENUM,
> because the sequence contains commas
>
> MM
You could use something like:

#include <boost/preprocessor/seq.hpp>
#include <boost/preprocessor/repetition/enum.hpp>

#define SEQ (A)(B)(C)

BOOST_PP_SEQ_ENUM(SEQ)
#define TMPL(elem) (tmpl<elem::x, elem::y>)
#define MACRO(z,n,data) TMPL(BOOST_PP_SEQ_ELEM(n, SEQ))

BOOST_PP_ENUM(3, MACRO, )

This also has the benefit of separating the class names from what you
want to do with them.

HTH,
Philipp Moeller


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