On 01/31/10 07:20, Hicham Mouline wrote: [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
== 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. [snip]
My previous attachment could be simplified by using: template < typename Domains
struct cross_product_fold
: fold
< Domains
, cross_prod_nil
, cross_product
{
};
typedef
cross_product_fold
< package
::type absent_fields_seq ; typedef cross_product_fold < absent_fields_seq ::type select_fields_seq ; 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
, ... Because all the members of params are double, there is no way to differentiate between different the 1st and 2nd vector<double>
Yes; however, Couldn't you, pair each type with it's index?
IOW, you have, instead of:
typedef
package_c
while with PP, I could name the types params_field1 and params_field2,
The aforementioned fusion map would have keys like
integral_c