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);
}