Return types of the methods of a struct

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 19 07:43:00 PDT 2015


On 6/19/15 10:13 AM, Quentin Ladeveze wrote:
> On Friday, 19 June 2015 at 14:04:05 UTC, Daniel Kozák wrote:
>>
>> On Fri, 19 Jun 2015 13:52:52 +0000
>> Quentin Ladeveze via Digitalmars-d-learn
>> <digitalmars-d-learn at puremagic.com> wrote:
>>
>>> On Friday, 19 June 2015 at 13:38:45 UTC, Steven Schveighoffer wrote:
>>> >
>>> > Does this work for you, or is there a further expectation?
>>> >
>>> > auto asTuple() { return Tuple!(int, "a", ...)(a, b, > stringValue);}
>>> >
>>> > -Steve
>>>
>>> In fact, I was trying to use traits to create the tuple
>>> automatically and being able to add or remove methods to the
>>> struct without breaking the asTuple method.
>>> I used allMembers for the name of the methods, but I didn't found
>>> anything for their return types or their values.
>>>
>>> Thank you.
>> http://dlang.org/phobos/std_traits.html#ReturnType
>> http://dlang.org/phobos/std_traits.html#ParameterTypeTuple
>
> These are interesting and can be useful, but allMembers returns strings
> and not functions, so I can't apply ReturnType.

It's a *compile time* string. D is able to do some amazing things with 
this :)

// assuming 'a' is the first member
mixin("alias aReturnType = ReturnType!(Example." ~ __traits(allMembers, 
Example)[0] ~ ");");
static assert(is(aReturnType == int));

Using foreach over allMembers, you can construct a perfect return tuple 
using introspection and mixin.

-Steve


More information about the Digitalmars-d-learn mailing list