c++0x enum class to string
-
hallo!
ich hab jetzt ein wenig gegoogelt, aber einen 'standardweg', um aus einer "enum class" einen zugehörigen string zu mappen hab ich nicht gefunden.
dh:
enum class Letters { A, B, C };Da wäre es natürlich cool f. div. debug-outputs jederzeit auf einen string mappen zu können.
Eine Möglichkeit wäre natürlich eine neue Klasse zu erstellen, die zB einestatic const char *toSring()Methode anbietet...
Welche Wege verwendet ihr?
Danke im Voraus
-
swalkner schrieb:
Welche Wege verwendet ihr?
kein Enum verwenden. Hab schon sehr lange nicht mehr gebraucht.
Wenn es wirklich unerlässlich ist, bietet sich
enum class Letters { A, B, C, LAST_LETTER }; std::ostream& operator<<(std::ostream& os, Letters l) { const char* letters_string[static_cast<int>(LAST_LETTER)] = { "A", "B", "C" }; assert(static_cast<int>(l) >= 0 && static_cast<int>(l) < static_cast<int>(LAST_LETTER)); return os << letters_string[static_cast<int>(l)]; }an.
-
Ok deine Version hat halt den Nachteil, dass man wirklich von 0 bis n-1 Werte verwenden muss. Das hat man evtl. auch nicht immer.
Warum KEINE Enums? Wie würdest du zB eine State-Machine implementieren? Welche Alternative verwendest du? Bzw. brauchst du die für die Sachen die du implementierst überhaupt...?
-
f. div. debug-outputs
Dann kannst du auch gleich Strings verwenden.
-
State-Machine: http://www.boost.org/doc/libs/1_55_0/libs/statechart/doc/tutorial.html
Siehst du da irgendwo enums? (Btw: Enums sind manchmal ok, aber switch und if-Kaskaden sollten immer* vermieden werden.)* In wenigen Fällen kann es für die Performance notwendig sein, aber sehr oft sind Funktionszeiger schneller als switchs.