Effiziente Konvertierung von Strings in Aufzählungen in C
Bei der Arbeit mit Aufzählungen in C müssen Sie möglicherweise Strings in die entsprechenden umwandeln Enum-Werte. Während eine Switch-Anweisung ausreichen kann, kann sie bei zahlreichen Enum-Werten umständlich werden. In diesem Artikel werden alternative Ansätze für eine effiziente String-zu-Enum-Konvertierung untersucht.
std::map-Lösung
Ein Ansatz besteht darin, eine std::map
C 11 Syntactic Sugar
Für C 11 und höher steht eine prägnantere Lösung zur Verfügung. Mit statisch initialisiertem std::unordered_map können Sie die Karte elegant mit geschweiften Klammern füllen:
static std::unordered_map<std::string,E> const table = { {"a",E::a}, {"b",E::b} };
Um die Suche durchzuführen, verwenden Sie einfach die Methode find() für die Tabelle und prüfen Sie, ob der Iterator gültig ist. Wenn gefunden, können Sie den entsprechenden Enum-Wert direkt abrufen.
Beispiel
Betrachten Sie beispielsweise die folgende Enum-Deklaration:
enum class E { a, b, c };
Und Eine Zeichenfolge „a“ können Sie mithilfe der Tabelle in den entsprechenden Enum-Wert umwandeln:
auto it = table.find("a"); if (it != table.end()) { E result = it->second; // ... }
Dieser Ansatz liefert a Prägnante und effiziente Lösung zum Konvertieren von Zeichenfolgen in Aufzählungen in C, wodurch die Komplexität langer Switch-Anweisungen verringert wird.
Das obige ist der detaillierte Inhalt vonWie konvertiert man Strings in C effizient in Enums?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!