> enum E_MODE { > LSB, // 0 > USB, // 1 > DSB, // 2 > CWL, // 3 > CWU, // 4 > FMN, // 5 > AM, // 6 > DIGU, // 7 > SPEC, // 8 > DIGL, // 9 > SAM, // 10 > DRM // 11 > } > > void main() { > // associative array for translation > with (E_MODE) immutable auto a_mode = [ > "LSB": LSB, > "USB": USB, > "DSB": DSB, > "CWL": CWL, > "CWU": CWU, > "FMN": FMN, > "AM": AM, > "DIGU": DIGU, > "SPEC": SPEC, > "DIGL": DIGL, > "SAM": SAM, > "DRM": DRM > ]; > }
That code of mine is not good. The following version is more DRY, and in theory it's a better, but in practice it doesn't work: import std.stdio: writeln; enum E_MODE { LSB, USB, DSB, CWL, CWU, FMN, AM, DIGU, SPEC, DIGL, SAM, DRM } /*immutable*/ E_MODE[string] a_mode; static this () { foreach (m; __traits(allMembers, E_MODE)) mixin(`a_mode["` ~ m ~ `"] = E_MODE.` ~ m ~ `;`); } void main() { writeln(a_mode); } Bye, bearophile