digitalmars.D.learn - an enum inside another enum
- maarten van damme (18/18) Jul 26 2012 Hi, would the response to this question :
- Jacob Carlborg (4/22) Jul 26 2012 I'm pretty sure it's possible to do with some meta programming magic.
- bearophile (21/31) Jul 26 2012 By convention in D enum names start with an upper case.
- Simen Kjaeraas (7/8) Jul 26 2012 Nope. "The text contents of the string must be compilable as a valid
Hi, would the response to this question : http://stackoverflow.com/questions/757684/enum-inheritance be the same for D? I have these two enums: enum first : string{ a="a", b="b" } enum second : string{ a=first.a, b=first.b, c="c" } Is there a way to make this cleaner? I don't mind having something like second.firstchar.a with firstchar beeing a "first" enum. To do that I would need to tell the enum that it can also use the type "first" because in the end, that is a string too...
Jul 26 2012
On 2012-07-26 13:40, maarten van damme wrote:Hi, would the response to this question : http://stackoverflow.com/questions/757684/enum-inheritance be the same for D? I have these two enums: enum first : string{ a="a", b="b" } enum second : string{ a=first.a, b=first.b, c="c" } Is there a way to make this cleaner? I don't mind having something like second.firstchar.a with firstchar beeing a "first" enum. To do that I would need to tell the enum that it can also use the type "first" because in the end, that is a string too...I'm pretty sure it's possible to do with some meta programming magic. -- /Jacob Carlborg
Jul 26 2012
maarten van damme:enum first : string{ a="a", b="b" } enum second : string{ a=first.a, b=first.b, c="c" } Is there a way to make this cleaner?By convention in D enum names start with an upper case. I have tried this, partially derived by Simen Kjaeraas code (with T.stringof), but isn't D supporting mixins inside enums? string EnumInh(T)() if (is(T == enum)) { string result; foreach (e; __traits(allMembers, T)) result ~= e ~ " = " ~ T.stringof ~"." ~ e ~ ",\n"; return result; } enum First : string { a = "a", b = "b" } enum Second : string { mixin(EnumInh!First), c = "c" } void main() {} Bye, bearophile
Jul 26 2012
On Thu, 26 Jul 2012 15:07:56 +0200, bearophile <bearophileHUGS lycos.com> wrote:but isn't D supporting mixins inside enums?Nope. "The text contents of the string must be compilable as a valid StatementList, and is compiled as such." And enums don't allow statements in their body. -- Simen
Jul 26 2012