enums extension
Simen Kjaeraas
simen.kjaras at gmail.com
Tue May 15 22:54:45 PDT 2012
On Wed, 16 May 2012 06:22:15 +0200, Comrad
<comrad.karlovich at googlemail.com> wrote:
> Dear developers and community,
> I want to draw you attention to the topic which was already discussed
> here:
> http://forum.dlang.org/thread/9to6n8$12d6$1@digitaldaemon.com
> and here:
> http://forum.dlang.org/thread/bl1n0e$1km5$1@digitaldaemon.com
>
> My question is: was something similar already done? are there some plans
> to do that?
I have implemented this functionality in user code, with some caveats:
module enumMagic;
string EnumDefAsString(T)()
if (is(T == enum))
{
string result = "";
foreach (e; __traits(allMembers, T)) {
result ~= e ~ " = T." ~ e ~ ",";
}
return result;
}
template ExtendEnum(T, string s)
if (is(T == enum) &&
is(typeof({mixin("enum a{"~s~"}");})))
{
mixin(
"enum ExtendEnum {"
~ EnumDefAsString!T()
~ s
~ "}");
}
unittest {
enum Foo {
a,
b,
c
}
alias ExtendEnum!( Foo, q{
d,
e
}) Bar;
Bar b;
b = Bar.a; // Look ma, I stole this from Foo!
b = Bar.d;
assert( Bar.a == Foo.a ); // Can compare the two.
//b = Foo.a; // But cannot assign from one to the other.
}
void main( ) {
}
A library implementation with the missing features is possible, but would
use a
struct instead of an enum, an be a rather larger piece of code than this.
More information about the Digitalmars-d
mailing list