import taggedalgebraic.visit : visit; struct Button { string caption; int callbackID; } struct Label { string caption; } union U { Button button; Label label; } alias Control = TaggedUnion!U; // define a generic list of controls Control[] controls = [ Control(Button("Hello", -1)), Control(Label("World")) ]; // just a dummy for the sake of the example void print(string message) {} // short syntax using `algebraic` foreach (c; controls) print(algebraic(c).caption); // slightly longer and noisier alternative using `visit` foreach (c; controls) print(c.visit!(ct => ct.caption)); // low level alternative foreach (c; controls) { final switch (c.kind) { case Control.Kind.button: print(c.buttonValue.caption); break; case Control.Kind.label: print(c.labelValue.caption); break; } }
Converts a given TaggedUnion to a TaggedAlgebraic.
This allows to access members or operators of a TaggedUnion with a concise syntax.