Passing Elements of A Static Array as Function Parameters

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Sep 14 00:05:11 PDT 2015


On Monday, 14 September 2015 at 05:18:00 UTC, Nordlöw wrote:
> If I have a static array `x` defined as
>
>     enum N = 3;
>     int[N] x;
>
> how do I pass it's elements into a variadic function
>
>     f(T...)(T xs) if (T.length >= 3)
>
> ?

You could turn it into a Tuple and use the `expand` method to get 
a TypeTuple (AliasSeq).

import std.typecons;
import std.typetuple;
import std.stdio;

template genTypeList(T, size_t n)
{
	static if (n <= 1)
	{
		alias genTypeList = T;
	}
	else
	{
		alias genTypeList = TypeTuple!(T, genTypeList!(T, n - 1));
	}
}

auto asTuple(T, size_t n)(ref T[n] arr)
{
	return Tuple!(genTypeList!(T, n))(arr);
}

void test(T...)(T xs)
{
	writeln("Length: ", T.length, ", Elements: ", xs);
}

void main()
{
	int[5] a = [0, 1, 2, 3, 4];
	test(a);                    //Length: 1, Elements: [0, 1, 2, 3, 
4]
	test(a.asTuple.expand);     //Length: 5, Elements: 01234
}


More information about the Digitalmars-d-learn mailing list