On Tuesday, 3 November 2015 at 23:41:10 UTC, maik klein wrote:
Is it possible to filter variadics for example if I would call

void printSumIntFloats(Ts...)(Ts ts){...}

printSumIntFloats(1,1.0f,2,2.0f);

I want to print the sum of all integers and the sum of all floats.


//Pseudo code
void printSumIntFloats(Ts...)(Ts ts){
    auto sumOfInts = ts
                      .filter!(isInteger)
                      .reduce(a => a + b);
    writeln(sumOfInts);
    ...
}

Is something like this possible?

It is possible: I don't think that reduce works on tuples but you could do something like this.

import std.traits, std.meta;
void printsumIntFloats(Ts...)(Ts ts)
{
   alias integers = Filter!(isInteger, Ts);
   alias floats   = Filter!(isFloatingPoint, Ts);
   alias int_t    = CommonType!(integers);
   alias float_t  = CommonType!(floats);

   int_t intres = 0;
   float_t floatres = 0;
   foreach(i, arg; ts)
   {
      static if(isInteger!(Ts[i]))
          intres += arg;
      else
          floatres += arg;
   }
   writeln(intres);
   writeln(floatres);
}








Reply via email to