On Tuesday, 2 September 2014 at 14:59:41 UTC, evilrat wrote:
sorry, i forgot everything.
here is example of how to do this
-----
import std.conv : to;
enum Test
{
One,
Two,
Three,
}
template to(T: string)
{
T to(A: Test)(A val)
{
final switch (val)
{
case Test.One: return "1";
case Test.Two: return "2";
case Test.Three: return "3";
}
}
}
void main()
{
assert(to!string(Test.One) == "1");
auto t = cast(Test)2;
assert(to!string(t) == "3");
assert(to!int("4") == 4); // shows original to! template works
}
Word of warning: You are not overriding "to", but rather, simply
defining your own "to" locally, which resolves as a better match
in the context where you are using it.
If you pass the enum to another function in another module, your
"to" will NOT be called.