The most awesome "forward to member" solution?
Meta via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 6 15:59:15 PDT 2015
On Sunday, 3 May 2015 at 18:54:45 UTC, Andrei Alexandrescu wrote:
> You're right, that is lovely! I've improved it as follows:
>
> mixin template forwardToMember(alias member, methods...)
> {
> import std.algorithm : among;
> import std.traits : ParameterTypeTuple;
> template opDispatch(string sym)
> if ((methods.length == 0 || sym.among(methods)))
> {
> auto ref opDispatch(
> ParameterTypeTuple!(__traits(getMember, member,
> sym)) args)
> {
> return __traits(getMember, member, sym)(args);
> }
> }
> }
>
> So now ref returns are preserved and the mixin is
> self-contained (doesn't require imports from the outside).
>
> Compared to my solution, this has the advantage that if the
> child defines a method, it will take precedence over the
> formatted one. So that allowed me to add a feature: if no
> methods are specified, all are forwarded.
>
> There are a couple of ways in which this could and should be
> improved, most notably overloads control. Even as is it's
> pretty darn awesome, Meta could you please make it into a pull
> request? I think it should go in std.functional.
>
>
> Andrei
I have forgotten to mention that I will make a pull request for
this ASAP. I have been in the process of moving and starting a
new job this week and last so I only have enough time to
occasionally post currently.
More information about the Digitalmars-d
mailing list