Enum auflösen
-
Hi zusammen,
habe mir ein enum zusammengestrickt:
enum Dinge { DING_A = 0; DING_B = 1; ... };In manchen Situationen würde ich nun gerne aus dem numerischen Wert wieder die Zeichenkette erhalten, also sowas in der Art von
resolve(Dinge, 0) => "DING_A"Gibt es das in c++ oder ist ein enum dafür einfach nicht gedacht?
-
dilate schrieb:
In manchen Situationen würde ich nun gerne aus dem numerischen Wert wieder die Zeichenkette erhalten
Die "Zeichenkette" wie du das nennst gibt's nicht. Die Einträge in einer enum sind nur symbole( alias ) für die Werte und existieren zur Laufzeit nicht.
Wenn du aber eine funktion brauchst die dir für irgendwelche Integer Werte einen String zurückgibt wäre wahrscheinlichstd::map<int, string>was du brauchst.
z.b#include <iostream> #include <string> #include <map> using namespace std; class enummapper { public: enum myenum { ENTRY_A, ENTRY_B, ENTRY_C }; enummapper() { mapper[ENTRY_A]="ENTRY_A"; mapper[ENTRY_B]="ENTRY_B"; mapper[ENTRY_C]="ENTRY_C"; } string tostring( myenum val ); private: map<myenum, string> mapper; }; string enummapper::tostring( myenum val ) { return mapper[val]; } int main() { enummapper m; enummapper::myenum e = enummapper::ENTRY_B; cout << m.tostring(e) << endl; return 0; }Kurt
-
Wenn du den Namen nicht ausgeben willst sondern nur wieder so ein Typ haben willst geht das so:
enum Dinge { DingA = 0, DingB = 1 }; Dinge ding = static_cast<Dinge>(1); //DingBGruß