-----Original Message-----
From: boost-users-bounces@lists.boost.org [mailto:boost-users-
bounces@lists.boost.org] On Behalf Of Larry Evans
Sent: 06 February 2010 19:26
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] generate structs with all combinations of
members from a given struct
On 02/06/10 12:06, Hicham Mouline wrote:
[snip]
My *intuition* as well as posts from others (e.g. Joel Guzman and
Eric Niebler) and a proto webpage:
http://www.boost.org/doc/libs/1_41_0/doc/html/proto/appendices.html#boos
t_proto.appendices.rationale
suggests this PP method would be faster than the fusion-based solution.
However, I've been wondering how you would use this.
Starting from
struct S {
type1 field1;
...
typen fieldn; /// for now n=6 but may increase later
};
all types are either int, unsigned int, long, double or bool.
The PP code generates all the structs like
struct S_field1_field5 {
type1 field1;
type5 field5;
};
For each of these structs, we have the related type
multi_array
an M-dimension array the elements of which are 1 of the generated structs.
M can reach the order of 10, and the number of elements of the multi array
can be quite large, therefore it is important to generate a multi_array that
is as accurate as possible.
The user selects at runtime which fields she is interested in, this then
fills in a bitset<n>.
At runtime we then select the multi_array we will work with.
I will find a way to adapt all of the multi_arrays to be derived from a
multi_array_base via some wrapper.
struct multi_array_base { virtual ~ multi_array_base(); };
I have say 5 translation units tr1,tr2,tr3,tr4 and tr5.
The specific multi_array is generated in tr1. It needs to pass via tr2,tr3
and tr4 to reach tr5.
tr2,3 and 4 do not need to know what exact multi_array type it is, so they
just deal with multi_array_base.
tr5 then dynamic casts the multi_array_base ref to the appropriate
multi_array with the appropriate S.
pseudo_code tr1, itself geenrate
switch( bitset.toulong() ) {
case 1: some_function(
multi_array_adapted_to_derive_from_base& );
case 2: some_function(
multi_array_adapted_to_derive_from_base& );
....
case 63: some_function(
multi_array_adapted_to_derive_from_base& );
}
This is still work in progress.
Regards,