Getting the string representing the enum value ~ Proposal
kris
foo at bar.com
Wed Apr 5 01:56:42 PDT 2006
Don Clugston wrote:
>
>>>> 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.
Was kinda' hoping you'd have a go at this;
I'd expected x.nameof to return an unqualified name (what you called the
symbol name?). The reasoning was twofold: it should be very easy to
implement consistently, and one could perhaps construct a
fully-qualified name by concatenation (via ~) of component symbols? The
compiler would probably fold them, since each would be the equivalent of
a const char[]? Or, maybe an x.fullnameof might appear later? Anyway,
the goal was to expose something simple to implement and easy to use. As
usual, you've opened up a whole bunch of other useful possibilities <g>
More information about the Digitalmars-d
mailing list