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