On Sunday, 24 June 2018 at 17:23:54 UTC, Steven Schveighoffer
wrote:
static if(__traits(compiles, fastEnumToString(val)))
return fastEnumToString(val);
else
return slowEnumToString(val); // checks for duplicates
Should eliminate the issues, because it's not going to compile
the slow version if the fast version can work.
-Steve
Yes, I thought about that too, but the problem is that
std.conv.to is used in std.stdio and I don't want to remember to
always to do
writeln("Some text:", x.to!string);
instead of
writeln("Some text:", x);
for some enum instance `x`.
I'm gonna hack up another solution
struct Enum(E)
if (is(E == enum))
{
@property string toString() @safe pure nothrow @nogc
{
// fast implementation
}
E _enum;
alias _enum this;
}
Further, it just struck me that we can generalize my fast
solution to include enumerations with enumerator aliases that are
defined directly after its original enumerator by checking with
a `static if` if the current enumerator value equals the previous
then we skip it. I'm gonna post the solution here after some
hacking.