On Monday, 5 September 2016 at 15:43:43 UTC, Nick Treleaven wrote:
Another solution is to support out argument declarations, as
they are a more general feature. These could then be used as
follows:
Tuple!(int, string) fn();
void unpack(T...)(Tuple!T, out T decls); // new phobos function
fn().unpack(int i, string s);
I think a combination of tuple slicing and unpack() overloads
could allow ignoring leading or trailing tuple fields.
We can already (almost do that):
========================================================
import std.stdio, std.typecons;
void unpack(T...)(Tuple!T tup, out T decls)
{
static if (tup.length > 0)
{
decls[0] = tup[0];
tuple(tup[1..$]).unpack(decls[1..$]);
}
}
void main()
{
auto t = tuple(1, "a", 3.0);
int i;
string s;
double d;
t.unpack(i, s, d);
writeln(i);
writeln(s);
writeln(d);
}
========================================================