On Wednesday, 21 March 2012 at 17:02:05 UTC, Brian Brady wrote:

As per the commented section, I want to be able to dynamically figure out, which member of the struct to average across, for all the structs in the array.

Timon has given you an good example to get D to generate some code for you. I would also point out that combining your if block or even Timon's solution with a template:

double average(string param)(Data[] x)
{
 static if (!isNumeric!(typeof(mixin("Data."~param))))
   return -1;
 else
 {
  //auto average = reduce!("a."~param~" + b."~param)(x)/x.length;
  typeof(return) average = 0;
  foreach(v; x) {
          mixin("average += v."~param~";");
  }
  return average/x.length;
 }
}

Note, I commented out reduce as it uses the array type instead of the calculation type. I think I'll file than as a bug. Also the reduce version would not give you a double back even if it did work, need a cast in there.

Now calculating the parameter is just

auto ans = average!"d1"(x);

Reply via email to