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 eine

    static 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.


Anmelden zum Antworten