Wie schreibt man eine switch-Anweisung für Streicher, die in Qt?

Ich brauchen, um das äquivalent einer switch/case-Anweisung für Streicher in C++ mit Qt. Ich glaube, dass ist der einfachste Weg so etwas (pseudo code)

enum colours { red, green, blue };
QString array[] colour_names = { "red", "green", "blue" };
switch (color_names[user_string]) {
  case red: answer="Chose red";
  case green: answer="Chose green";
  case blue: answer="Chose blue";
  other: answer="Invalid choice";
}

Aber diese nicht nutzen, einige der features von Qt. Ich habe gelesen, über QStringList ist (die position des Strings in eine Liste von strings), und std:map (siehe Wie man sich leicht anzeigen c++ enums strings, die ich nicht ganz verstanden).

Gibt es eine bessere Art und Weise zu tun, ein switch auf strings?

  • wollen Sie nicht zur Verwendung des enum?
  • Sie können strings in einer switch-Anweisung. Sie haben nicht gesagt, warum Sie benötigen einen swicth-Anweisung. Die einfachste Lösung, um eine Suche auf Basis eines Strings ist die Verwendung einer Karte. In Qt, die es bedeuten würde, mit einem QMap<QString,QString>.
  • Sollten Sie mit dem llvm::StringSwitch: llvm.org/docs/doxygen/html/StringSwitch_8h_source.html
  • Ich fand einen Vorschlag, auf einer anderen Website zu verwenden, eine QStringList von Farben, verwenden Sie IndexOf() in den Schalter, und verwenden Sie dann die enum-Wert in den case-Anweisungen
  • Sie können es mit QMetaEnum und QMetaObject wie in meiner Antwort hier
InformationsquelleAutor TSG | 2013-09-29
Schreibe einen Kommentar