On Monday, 15 April 2019 at 10:15:50 UTC, Anton Fediushin wrote:
On Monday, 15 April 2019 at 10:00:36 UTC, Alex wrote:

Enum.internal is private to make it inaccessible from any other place. All I want is a way to have an enum that I could extend with my own methods.

Something to make the following code work:
```
Enum a = Enum.foo;
Enum b = Enum.bar;
assert(a == Enum.foo);
assert(a < b);
assert(a.toString == "FOO");
assert(b.toString == "BAR");
writeln(a); // FOO
writeln(b); // BAR
```

This would:

´´´

struct Enum {
  private {
    enum internal {
      foo,
      bar
    }
    internal m_enum;
  }
  this(internal i) { m_enum = i; }
  alias m_enum this;
  string toString() {
    if(m_enum == internal.foo)
        return "FOO";
    else
        return "BAR";
  }
}

void fun(Enum e) {}


void main(){
    import std.stdio;
    fun(Enum.init);
    Enum a = Enum.foo;
    Enum b = Enum.bar;
    assert(a == Enum.foo);
    assert(a < b);
    assert(a.toString == "FOO");
    assert(b.toString == "BAR");
    writeln(a); // FOO
    writeln(b); // BAR
}
´´´

Assuming, that automatic generation of "FOO" from foo was not part of your question :-p

Reply via email to