Obtenir le nom Enum de la valeur?

Je suis tombé sur ce sujet en cherchant une réponse à cette question.

Essentiellement, ce que je demande est le contraire de ce qui est fait dans ce fil. Au lieu d'obtenir la valeur d'une énumération par son nom, j'aimerais obtenir son nom par sa valeur. Comment cela est-il fait?

0
@EricJablow Je suppose que non ...: /
ajouté l'auteur Jeroen Bollen, source
Les enums peuvent être définis les uns par rapport aux autres: enum {blanc, gris = 1, gris = 1, noir}; . Ils peuvent être construits à partir d'énumérations nommées: enum {user = 4, group = 2; over = 1;} `Ceux-ci peuvent être manipulés: enum all = user | groupe | other; Comment convertir 7 à "all" ici>
ajouté l'auteur Eric Jablow, source

1 Réponses

Vous faites exactement la même chose, mais comme Eric le fait remarquer, ce n'est pas parfait:

import std.conv;
import std.stdio;

enum LogLevel { ALL, INFO, WARNING }
enum Color {white, gray = 1, grey =1, black}

void main()
{
     enum l = to!LogLevel(1);
     assert(l == LogLevel.INFO);
     writeln(to!string(l));

     enum c = to!Color(1);
     writeln(to!string(c));
}

INFO
gray
0
ajouté
C'est très très très bonne réponse. Pas besoin de beaucoup de cas dans un commutateur. Pas besoin de la macro X Et pas de risque d'oublier de mettre à jour la valeur enum dans un cas dans la fonction et de renvoyer un mauvais nom.
ajouté l'auteur Jack, source