On Friday, 1 March 2013 at 16:38:39 UTC, Era Scarecrow wrote:
On Friday, 1 March 2013 at 14:32:12 UTC, Andrea Fontana wrote:
struct MyStruct(WEIGHTS)
{
 string ...
 string ...

 alias WEIGHTS weights;
}


enum FirstWeights : double
{

}

enum SecondWeights : double
{
   double foo = 0.3,
   double bar = 0.4
}

so:
auto s1 = MyStruct!FirstWeights ...
auto s2 = MyStruct!SecondWeights ...

With templates there's a few different ways you can consider handling it; I'm not recommending any of them but. Keeping it simple, clean & easy to read is probably the best solution; Although most of these won't help with any algorithms that need them to be identical (unless cast or they are not templates).

1) If structs are the same size: You can forcibly cast it so one will work with the other, however enums (or anything related that's static or not stored with the struct) doesn't transfer over and is lost.

I've tried this in my experimental polymorphic struct; Where the methods differed slightly but data the structure is guaranteed to be identical.

2) Conversion/Accessing differences: You can include a flag specifying it's of a certain type or qualification, this can let them interact if they are basically the same thing with something minor under the hood different but that doesn't matter (or will get in the way); Although unqual (or related in std.traits) might be a better option for it, not sure myself.

  struct MyStruct(WEIGHTS) {
    enum isMyStruct = true;
  }

  void test(T1, T2)(T1 lhs, T2 rhs)
if (hasMember!(T1, "isMyStruct") && hasMember!(T2, "isMyStruct")) {}

3) non-Template: As mentioned you can avoid templates & different enums and instead use variables as appropriate.

I'm sure there's other ideas but I'm drawing a blank right now...

Maybe if i have MyStruct!Weights1 arr[]; MyStruct!Weights2 arr2[];
instead of trying to merge them, and call:
myfunc(singlebigarray);

I should write a template function with a variadic number of params:
myfunc(arr1, arr2, arr3 etc...);

Or simply come back to basic ineritance or previous solution, was just a challenge to find a compile time way to pre-compute all consts factors...




Reply via email to