Idiomatic way to call base method in generic code

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 25 05:14:42 PDT 2015


On Monday, 25 May 2015 at 09:24:58 UTC, ZombineDev wrote:
> On Monday, 25 May 2015 at 07:57:49 UTC, ketmar wrote:
>> i don't know why you want that, but something like this may do:
>>
>> auto callBaseMethod(string MTN, C, Args...) (inout C self, 
>> Args args) {
>>  alias FSC = BaseClassesTuple!(C)[0];
>>  return mixin(`self.`~FSC.stringof~`.`~MTN~"(args)");
>> }
>>
>> writeln(d.callBaseMethod!"toString");
>>
>
> Thanks!
>
> [1]: 
> https://github.com/ZombineDev/Chess2RT/blob/c36ba3e73744cf3912c25abccedbbd742f7f5be3/source/util/prettyprint.d#L7
>
> [2]: 
> https://github.com/ZombineDev/Chess2RT/blob/master/source/util/prettyprint.d#L14
>
> I initially had [1] a string mixin which goes through all the 
> members of a class and prints them and also prints its base 
> class' members, but then it seemed that it would be more 
> cleaner if I could use a function template [2] (which also 
> improved my debug experience) so I started exploring alias, but 
> they turned out to be less powerful then I thought:
>
> alias can't refer to a nested member:
> -------------
> struct Point2
> {
>     float x;
>     float y;
> }
>
> struct Line2
> {
>     Point2 start;
>     Point2 end;
>
>     mixin Access;
>
>     // alias x1 = this.start.x; <- this doesn't work :(
>
>     alias x1 = get!"start.x";
>     alias y1 = get!"start.y";
>     alias x2 = get!"end.x";
>     alias y2 = get!"end.y";
> }
>
> // I need to use a mixin to flatten the access :(
> private mixin template Access()
> {
>     ref auto get(string accessPattern)() inout
>     {
>         return mixin(accessPattern);
>     }
> }
> -------------
>
> So I wondered if I'm missing something and decided to ask here.
>
>> no. and again, why do you want that? why do you people are so 
>> afraid of
>> string mixins? ;-)
>
> Well I'm not afraid of string mixins, but the `alias` keyword 
> seemed to possess some mysterious power (I was also under the 
> influence of this [3] blog post) which I wanted to explore. 
> Also they're a bit more elegant.
>
> [3]: 
> http://blog.thecybershadow.net/2015/04/28/the-amazing-template-that-does-nothing/

You might be interested in this thread:

http://forum.dlang.org/thread/mi3pip$22va$1@digitalmars.com


More information about the Digitalmars-d-learn mailing list