Boost logo

Boost Users :

Subject: Re: [Boost-users] generate structs with all combinations of members from a given struct
From: Hicham Mouline (hicham_at_[hidden])
Date: 2010-01-31 08:20:56


----- Original Message -----
From: "Larry Evans" <cppljevans_at_[hidden]>
To: <boost-users_at_[hidden]>
Sent: Sunday, January 31, 2010 2:35 AM
Subject: Re: [Boost-users] generate structs with all combinations of members
from a given struct

> On 01/30/10 00:37, Hicham Mouline wrote:
>> Hello,
>> struct params {
>> double field1;
>> double field2;
>> double field3;
>> double fiedl4;
>> };
>> I would like to generate all the types that hold any combination of the
>> members of params.
> [snip]
>
> Step1:
> Create cross-product of void and {field1,field2,...}.
> This will produce a sequence of pairs:
>
> no_yes =
> ( (void,field1)
> , (void,field2)
> ...
> , (void,fieldn)
> )
>
> Step2:
>
> Create the crosss product of all rows in no_yes.
>
> cross_no_yes =
> ( (void,void,..void)
> , (field1,void,...void)
> , (void,field2,void...,void)
> ...
> , (field1,field2,...fieldn)
> )
>
> step3:
>
> remove all the voids in all the rows of cross_no_yes.
>
> Since the size<no_yes> == n and each element in that row is size 2,
> the cross_no_yes size would be 2^n. Then simply rm the all void row.
>
> Not tested.
I will try this thanks very much.

I will make all these types derived from a base struct with a virtual dtor.
Then I will move this base type around various translation units (so they
only need to know about the base struct), and then the last translation unit
will have access to the same list of types and then dynamic cast the base
struct to each of these generated structs and work with the actual type.

I thought of generation a fusion vector as well but the resulting vector
would look like this:

vector<
  vector<double>,
  vector<double>,
  vector<double>,
  vector<double>,
  vector<double,double>,
  ...
>

Because all the members of params are double, there is no way to
differentiate between different the 1st and 2nd vector<double>

while with PP, I could name the types params_field1 and params_field2,

regards,


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