Passing Arguments on in Variadic Functions

jmh530 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Sep 17 10:35:15 PDT 2015


On Monday, 14 September 2015 at 20:26:56 UTC, jmh530 wrote:
> Thanks to you both. This works perfect.

I noticed that there's some interesting interplay with this 
technique and default arguments.

 From below, it is required that you put the ones with default 
arguments last. If there are only two arguments, then it takes 
the second to be the default argument. However, I can't actually 
put just one argument, even though V is variadic and sample is a 
default. That seems strange to me because it makes it seem like 
sample really isn't optional.

Not sure if this is a bug or on purpose. The only way I can 
resolve it is by writing another function that just takes x 
(alternately one that takes x and sample only also works).

Also, it doesn't seem to let me put template constraints on V so 
that I could do something like constrain V to be numeric.

import std.algorithm : sum;
import std.stdio : writeln;

auto test(T, V ...)(T x, V seed, bool sample=true)
{
	auto sum_x = sum(x, seed);
	if (sample)
		return sum_x;
	else
		return sum_x / 2;
}

void main()
{
	int[] x = [10, 5, 15, 20, 30];
	writeln(test(x, true));
	writeln(test(x, false));
	float seed = 1;
	writeln(test(x, seed, true));
	writeln(test(x, seed, false));
}


More information about the Digitalmars-d-learn mailing list