Getting the string representing the enum value ~ Proposal

Don Clugston dac at nospam.com.au
Wed Apr 5 01:40:18 PDT 2006


>>> I'll propose that a new property be added, somewhat like the 
>>> .mangleof property. Instead, a .nameof property would simply return 
>>> the lexical token for the named entity. Doesn't matter whether it 
>>> refers to a struct, class, some attribute thereof, enum types or 
>>> members, whatever ... the x.nameof should just return a char[] of the 
>>> respective name.

I would love to have something which could convert enum values to 
strings; but I think there are some interesting possibilities to consider.

An approximation to .nameof can already be synthesised using template 
tricks with .mangleof. It does not, however, work for enum values, and 
doesn't really work for local variables (because local symbol names 
can't be alias parameters -- except for mixins).

One issue that I can see with this proposal is, what name should be 
returned? My template implementation provides symbolnameof, 
qualifiednameof, prettynameof, and manglednameof.

It also allows you to get the original name from an alias template 
parameter, allowing something like:

template debugPrint (alias a) {
void debugPrint()
{
    writefln("The value of ", qualifiednameof!(a), " is ", a);
}

only works as a mixin unfortunately. Usage:

void func()
{
   int x = 7;
   mixin debugPrint!(x);
   debugPrint();
}

// output:
The value of test.func.x is 7

------------
Obviously much too ugly to be much use right now, but I think there are 
some tantalising possibilities there, which should be considered in a 
nameof proposal.



More information about the Digitalmars-d-learn mailing list