C++ Commands als Userinput umsetzen Ideen?



  • Hallo, ich moechte ein programm schreiben, welches verschiedene commands als User Input akzeptiert. (zb --help), aber nicht als reine command line application wie viele Linux Programme laeuft.
    Mein jetziger Ansatz waere beim Start des Programms ne HashMap zu initialisieren, welche den Commands einen Integer zuordnet und dann wahle ich per Switch und Case die richtige Aktion zum User Input aus. Somit vermeide ich bei vielen Commands haufenweise if Anweisungen mit strings und das Ueberpruefen ob ein command existiert waere auch sehr einfach.
    Oder haettet ihr ne bessere Idee wie ich das Ganze umsetzen soll?



  • Noch einfacher (und m.E. besser) ist es direkt eine (Hash)Map mit Strings auf Funktionen abzubilden, dann benötigst du keine switch-case-Anweisungen mehr:

    map<string, void (*)()>
    // bzw.
    map<string, function<void()>
    

    s.a. std::function

    In C++ parsing complicated file where each line specifies a command gibt es eine ähnliche Umsetzung (Stichwort: command map).


  • Mod

    Du solltest dich immer fragen: Was passiert, wenn sich etwas ändert?

    Naheliegende Änderungen hier sind, dass Kommandos dazukommen oder wegfallen. Bei deiner switch-case Lösung müsstest du sowohl das Kommando zu deiner Map hinzufügen, als auch dein switch-casse immer synchron zum Inhalt der Map halten. Ein Rezept für Fehler. Bei einer Lösung im Stil von Th69 gäbe es nur eine zentrale Liste aller Kommandos, die man einfach anpassen kann und dann kann nichts schief gehen, Viel besser.



  • Möglicherweise ist ja auch diese Bibliothek für dich interessant: https://github.com/CLIUtils/CLI11. Klappt ganz gut 🙂



  • @marcel91200 sagte in C++ Commands als Userinput umsetzen Ideen?:

    Oder haettet ihr ne bessere Idee wie ich das Ganze umsetzen soll?

    Wieviele Leute haben das wohl schon gemacht? There's a library for that.

    Weil mir grad nichts blöderes einfällt: Boost.Program_options



  • Danke erstmal fuer die Antworten und speziell die guten Ansaetze, hat mir echt weitergeholfen. Ich wusste nichtmal, dass ich in Hashmaps auch auf Funktionen abbilden kann, kann aber sicherlich echt praktisch sein
    Eine library wollte ich nicht nutzen, da ich mich einfach gefragt hab, was es noch fuer Ideen gibt, ohne sofort auf ne fertige Loesung zurueckzugreifen.


Log in to reply