Get name of alias parameter at compile time?

Lutger lutger.blijdestijn at gmail.com
Thu Oct 15 08:50:25 PDT 2009


Denis Koroskin wrote:

> On Thu, 15 Oct 2009 18:22:37 +0400, dsimcha <dsimcha at yahoo.com> wrote:
> 
>> Jacob Carlborg Wrote:
>>
>>> On 10/14/09 06:36, dsimcha wrote:
>>> > Is there a way to get the name of an alias parameter at compile
>>> time?  For
>>> > example:
>>> >
>>> > void doStuff() {
>>> >      // Do stuff.
>>> > }
>>> >
>>> > void templ(alias fun)() {
>>> >     writeln(fun.stringof);  // Prints doStuff.
>>> > }
>>>
>>> Do you want that to print "fun" instead of "doStuff"?
>>
>> No, the whole point is that I want to print "doStuff".
> 
> What's the big deal?
> 
> import std.stdio;
> 
> void doStuff() {
> }
> 
> void templ(alias fun)() {
>      writeln(fun.stringof);   // prints "main()"
> }
> 
> void main()
> {
>      templ!(main);
> }
> 
> Works for both D1 and D2

I was a bit surprised too since the code dsimcha posted did exactly that. 
However, change void doStuff() to void doStuff(int a) and you got an error.

I remembered hacking around that one, if anybody knows how to do it better 
it would be good to know:

void doStuff(int a)
{
// Do stuff.
}

void templ(T...)()
    if (T.length==1)
{
    writeln( T.stringof[6..$-1] );
}

void main()
{
    templ!doStuff();
}





More information about the Digitalmars-d mailing list