AnsiString nach enum



  • Hallo,

    ich habe in meiner Anwendung ein enum und möchte gerne einen String zu diesem enum konvertieren, da ich nicht 50 if / else in meinen Code einbauen will, da dies bei 500k Datensätzen sehr auf die Performance geht.

    Hier mein bisheriger Code:

    String tag;
    String content;
    enum Tags { Title, Product };
    Tags tags;
    
    switch (XmlScanner1->XmlParser->CurPartType)
    {
          case ptStartTag :
               tag = XmlScanner1->XmlParser->CurName;
               tags = (TAGS)tag;
          break;
    
          case  ptContent :
              content = XmlScanner1->XmlParser->CurContent;
              switch()
             {
                 case Title:
                 break;
    
                 case Product:
                 break;
    
                 default:
                 break;
              }
          break;
    }
    

    Hat jemand eine Idee wie die Konvertierung zu schaffen ist?

    jens



  • Ähm,

    in dem switch steht ein switch(tags) drinnen 🙂

    jens



  • Hallo,

    Du kannst einen String nicht in ein enum casten, da ein enum intern eigentlich nur ein int ist.
    Du musst dir eine Liste halten, wo die Strings mit dem entsprechenden enum (oder dem entsprechenden int) verknüpft werden.
    Dann musst du nur noch schauen ob der übergebene String in der Liste ist und das entsprechende enum zurückgeben. Das lässt sich z. Bsp. auch einfach über eine std::map lösen.
    z. Bsp. so etwa

    std::map<String,Tags> TagsListe;
    

    Diese map musst du natürlich vorher füllen.
    Zugreifen kannst du dann z.Bsp. so

    String test("Titel");
    Tags temp = TagsListe[test];
    

    Wobei hier das Problem besteht, dass wenn der String nicht in der Liste steht, ein neuer Eintrag erzeugt wird.
    andere Variante

    Tags temp;
    String test("Titel");
    std::map<String,Tags>::iterator it = TagsListe.find(test);
    if( it != TagsListe.end() ) Tags = it->second();
    

    Das ist aber nur ein Vorschlag, es gibt noch mehr Möglichkeiten (z.Bsp. über ein StringArray).

    Ciao


Anmelden zum Antworten