June 27, 2013 [Issue 10490] New: Type enum in std.variant.Algebraic for final switches | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=10490 Summary: Type enum in std.variant.Algebraic for final switches Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: bearophile_hugs@eml.cc --- Comment #0 from bearophile_hugs@eml.cc 2013-06-27 13:48:47 PDT --- This enhancement request is just an idea. Maybe better ideas can be found. Given the definition of an Algebraic like this: import std.variant; struct Foo {} void main() { alias T = Algebraic!(int, Foo); } I think it can be a good idea to generate automatically inside T an enum and a method like this: enum Type { int_, Foo; } @property Type theType() const { return ...; } (Built-in types are keywords so they get a leading underscore.) So an Algebraic can be used in a final switch: import std.variant; struct Foo {} void main() { alias T = Algebraic!(int, Foo); auto t = T(5); final switch (t.theType) { case T.Type.int_: auto p = t.peek!int; break; case T.Type.Foo: auto p = t.peek!Foo; break; } } (Currently T.type is a TypeInfo, that can't be used in a final switch.) This allows a poor man's safe pattern matching on an Algebraic. An implementation of Issue 596 will allow to use a bit better pattern matching on an Algebraic. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
June 27, 2013 [Issue 10490] Type enum in std.variant.Algebraic for final switches | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=10490 Diggory <diggsey@googlemail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |diggsey@googlemail.com --- Comment #1 from Diggory <diggsey@googlemail.com> 2013-06-27 15:04:30 PDT --- This is related to Issue 10127 Personally I like that syntax where you use the actual type name rather than putting an underscore in front - it means you can easily use any type, not just ones that can be named. Algebraic could then have an alias to a particular instantiation of that TypeEnum template inside it rather than generating its own. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation