Subject: [Boost-users] [mpl] struct definition and mpl sequence in one shot?
From: Adam Romanek (romanek.adam_at_[hidden])
Date: 2014-10-01 16:31:23


Hi!

I have a problem and I'm not sure how to approach it. Currently my code
looks like this:

struct Definition {
   typedef boost::mpl::int_<5> A;
   typedef boost::mpl::int_<3> B;
   typedef boost::mpl::int_<6> C;
   typedef boost::mpl::int_<1> D;

   typedef boost::mpl::vector<A, B, C, D> Seq;
};

Here, the number N in mpl::int_< N > denotes some arbitrary decimal
number. Then some other code calculates the sum of these numbers up to
the type defined by "key", e.g. for Definition::D, the sum is 5 + 3 + 6
(A + B + C). This needs to be done at compile-time. That's why I use
mpl::vector and some appropriate meta-programming.

I'm wondering whether it would be possible to provide such struct
definition without the need to repeat type names in the mpl::vector for
Seq type. In other words, I'd probably need a bunch of macros which
would allow me to write code like this:

struct Definition {
   FIELD(A, 5);
   FIELD(B, 3);
   FIELD(C, 6);
   FIELD(D, 1);
   GEN_SEQ() // if needed
};

And then Definition::A would still refer to boost::mpl::int_<5>, or
would at least allow me to access the boost::mpl::int_<5> somehow, and
Definition::Seq would give me the appropriate MPL sequence.

Of couse this is just my imagination. The code might look different, I'm
just looking for options.

Thanks in advance.
Adam Romanek