Phobos' std.conv.to-conversion from enum to string doesn't scale beyond hundreds of enumerators

Per Nordlöw per.nordlow at gmail.com
Mon Jun 25 07:42:05 UTC 2018


On Sunday, 24 June 2018 at 23:53:09 UTC, Timoses wrote:
> enum members = [_traits(allMembers, E)];
>
> seems to work

Great!

Now becomes:


@safe:

/** Enumeration wrapper that uses optimized conversion to string 
(via `toString`
  * member).
  */
struct Enum(E)
if (is(E == enum))
{
     @property string toString() @safe pure nothrow @nogc
     {
         enum members = [__traits(allMembers, E)];
         final switch (_enum)
         {
             static foreach (index, member; members)
             {
                 static if (index == 0 ||
                            (__traits(getMember, E, members[index 
- 1]) !=
                             __traits(getMember, E, member)))
                 {
                 case __traits(getMember, E, member):
                     return member;
                 }
             }
         }
     }
     E _enum;                    // the wrapped enum
     alias _enum this;
}


More information about the Digitalmars-d mailing list