On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic <andrej.mitrov...@gmail.com>wrote:
> Thanks, Steven! > > You don't want to know what I'm up to :p. > Yes, yes, wo do! > > I'm using some traits to find out what kind of parameters a function takes. > I'm also using a demangler from phobos to find out the name of the function > (But I can't find any straightforward way to get a name of a function > without getting back "1D_5std_5funcName" etc, so I just take a hardcoded > slice). > You can get the name of an alias using __traits(identifier, aliasName), like this for example: template Name(alias a) { enum string Name = __traits(identifier, a); } int foo(int i) { return 0;} import std.stdio; void main() { writeln(Name!foo); // "foo", not "a". } As for demangling, how do you do to get mangled names in the first place? > > Anyway, I have a template function which takes as it's parameters a > function (aliased to func), and some arguments (right now just one in my > hardcoded code). It then creates a string which can be compiled via the > mixin. It constructs the string by checking the parameter types of func, and > for any ref or out parameter it detects it appends something like this to a > string: > "long var1; long var2; long var3; ". > How can you know if a parameter is ref or out? I remember seeing something about it in Phobos svn, are you using it? > So anyway, at the calling site I have this: > > mixin(unpack!(getTimes)(r"C:\\cookies")); > > getTimes() is a Phobos function with the signature: > getTimes(in char[] name, out d_time ftc, out d_time fta, out d_time ftm) > > And now I automatically have var1, var2, and var3 at my disposal. > That's fun :) > > It was just an exercise for fun but it's cool that things like this are > possible in D. It would be nice if I could get the actual names of the > parameters the function takes + the clear name of the function itself, that > way I'd actually get back variables "ftc, fta, ftm" back) I'm pretty sure I saw some code to do this. But maybe that was a D1 thing, using mangled names, too. in dsource/scrapple? Philippe