Re: Passing Elements of A Static Array as Function Parameters

2015-09-14 Thread Meta via Digitalmars-d-learn

On Monday, 14 September 2015 at 09:09:27 UTC, Per Nordlöw wrote:
Is there a reason why such a common thing isn't already in 
Phobos? If not what about adding it to std.typecons : asTuple


I guess nobody's really needed that functionality before. It 
might be an interesting addition to std.array.


Re: Passing Elements of A Static Array as Function Parameters

2015-09-14 Thread Meta via Digitalmars-d-learn

On Monday, 14 September 2015 at 08:56:43 UTC, Per Nordlöw wrote:

BTW: What about .tupleof? Isn't that what should be used here?


I don't believe .tupleof works for arrays.


Re: Passing Elements of A Static Array as Function Parameters

2015-09-14 Thread Meta via Digitalmars-d-learn

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
}


Re: Passing Elements of A Static Array as Function Parameters

2015-09-14 Thread Per Nordlöw via Digitalmars-d-learn

On Monday, 14 September 2015 at 07:05:23 UTC, Meta wrote:
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
}


Is there a reason why such a common thing isn't already in 
Phobos? If not what about adding it to std.typecons : asTuple


Re: Passing Elements of A Static Array as Function Parameters

2015-09-14 Thread Per Nordlöw via Digitalmars-d-learn

On Monday, 14 September 2015 at 07:05:23 UTC, Meta wrote:


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


BTW: What about .tupleof? Isn't that what should be used here?


Passing Elements of A Static Array as Function Parameters

2015-09-13 Thread Nordlöw via Digitalmars-d-learn

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)

?