how do I get the ith field of a std.typecons.Tuple ?
Timothee Cour
thelastmammoth at gmail.com
Sun Aug 18 02:35:23 PDT 2013
and this:
auto tupleFields(T)()if(isTuple!T){
string[T.length]ret;
foreach(i;Iota!(T.length))
ret[i]=tupleField!(T,i);
return ret;
}
unittest{
import std.typecons;
auto t=Tuple!(int,"foo",double,"bar")(2,3.4);
alias T=typeof(t);
static assert(tupleFields!T==["foo","bar"]);
}
On Sun, Aug 18, 2013 at 2:26 AM, Timothee Cour <thelastmammoth at gmail.com>wrote:
>
>
>
> On Sun, Aug 18, 2013 at 2:15 AM, John Colvin <
> john.loughran.colvin at gmail.com> wrote:
>
>> On Sunday, 18 August 2013 at 08:46:17 UTC, Timothee Cour wrote:
>>
>>> A)
>>> how do I get the ith field of a std.typecons.Tuple ?
>>> ideally, it should be as simple as:
>>>
>>> auto t=Tuple!(int,"name",double,"**name2")(1);
>>> static assert(t.fields[0] == "name");
>>>
>>
>> field is the old name for expand, retained for compatibility, it's not
>> recommended. It gives you direct access to the tuple inside the Tuple
>> struct, but it's for getting the variable values, not their names.
>>
>
> I didn't mean Tuple.field (as in Tuple.expand), I really meant the name of
> the corresponding entry, as shown in my example.
>
> If you want to get the *names* you've chosen for the tuple fields, you'll
>> have to use traits of some sort I think.
>>
>
> I don't see how that would work, however I've figured out how to do it:
>
> That's a bit of a hack, but should work. Should it be included in phobos,
> or, better, shall we fix Tuple with some of the recommendations i gave
> above?
> ----
> import std.typecons;
> auto tupleField(T,size_t i)()if(isTuple!T && i<T.length){
> enum foo0=typeof(T.init.slice!(i,i+1)).stringof;
> static assert(foo0[$-2..$]==`")`);//otherwise not a tuple with fields
> enum foo=typeof(T.init.slice!(i,i+1)).stringof[0..$-2];
> size_t j=foo.length;
> while(true){
> char fj=foo[--j];
> if(fj=='"')
> return foo[j+1..$];
> }
> }
> unittest{
> import std.typecons;
> auto t=Tuple!(int,"foo",double,"bar")(2,3.4);
> alias T=typeof(t);
> static assert(tupleField!(T,0)=="foo");
> static assert(tupleField!(T,1)=="bar");
> }
> ----
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20130818/ede2ed8b/attachment-0001.html>
More information about the Digitalmars-d-learn
mailing list