Designproblem bei einem Menü



  • Hey Leute,
    ich arbeite zur Zeit an einem neuen etwas größerem und vor allem erweiterbaren Projekt was mich länger motivieren soll :), da es sich um eine Konsolenanwendung handelt( macht mir iwie zur Zeit mehr Spaß wie GUI und ist bei dem Projekt auch leichter zu bediehnen wie ich finde ) brauche ich logischerweise auch ein Menü. Dazu erstelle ich mir gerade ein eigenes objektorientiertes Menü, da ich es aber nicht nur für diese Anwendung nutzen möchte, sondern auch für andere Projekte hab ich ein paar Design- bzw Umsetzungsprobleme. Es geht darum, dass im Menü verschiedene Einträge sind, wählt der User ein Eintrag aus, soll eine entsprechende Funktion aufgerufen werden. Da man der Nutzer meiner Klasse( in diesem Fall ich ) die Funktionen angeben können soll, die dann bei den verschiedenen Einträgen aufgerufen werden, kann ich also die Klasse nicht einfach so implementieren, dass die Funktionen aufgerufen werden wo ich brauche, sondern es muss variabel gehalten werden. Ich weiß leider nicht wie ich das ganze umsetzen soll, damit es variabel ist. Ich hoffe ihr versteht was ich meine und könnt mir vll Tipps geben oder mir helfen wie ich das ganze umsetzen kann.

    Vielen Dank schonmal.

    Lg freeG



  • Auch wenn dir das jetzt vermutlich nicht weiterhilft:
    Ich finde es sinnvoller, einfach alles über Startparameter zu regeln 😃



  • Klingt für mich nach einem Fall für std::tr1::function.



  • Jedes MenuItem hat ein std::function<void(void)>, das es abfeuert, wenn es aufgerufen wird.
    Oder Du schreibst dir eine Commandklasse, die ähnliches macht, aber noch zusätzliche Funktionalität bietet.



  • cooky451 schrieb:

    Auch wenn dir das jetzt vermutlich nicht weiterhilft:
    Ich finde es sinnvoller, einfach alles über Startparameter zu regeln 😃

    Das war auch anfangs meine Überlegung, hatte der Klasse schon ein Objekt eingebettet über welches dann Funktionen aufgerufen werden sollen. Aber dann dachte ich so...mhh ist ja auch blöd ich will das Menü ja öfters nutzen ohne es ständig anpassen/anders implementieren zu müssen. Vielleicht hat ja jemand anderes eine Idee 😉
    Oder seid ihr alle der gleichen Meinung wie cooky?

    Lg freeG

    Edit: Ok ich werde mir mal std::function anschauen. Hat jemand zufällig ne gute Adresse wo man eg eine kleine Einführung bzw Überblick oder ne Art Referenz/ Dokumentation über die neuen Klassen im neuen Standard und oder die neuen Sprachfeatures erhält?



  • fr33g schrieb:

    Oder seid ihr alle der gleichen Meinung wie cooky?

    Ja. Allerdings meint er glaub ich was anderes als Du verstanden hast.
    Er meint wohl

    >tolles_programm -v -a -c v=100 name="hans wurst"
    ** Tolles Programm v 1.0.2.3.4.1 **
    Ergebnis: 1.3425e-16
    Ende
    

    Wenn ein Programm wirklich Interaktion mit dem User benötigt, würde ich über eine GUI nachdenken. Kann der Kern des Programms alles per Startparameter abfragen, kann man ihn als Konsolenprogramm schreiben und bei Bedarf noch ne GUI drumrumstricken.



  • Generell kannst du dir für rekursive Strukturen wie Menüs mal das Composite-Pattern anschauen. Callbacks wie std::tr1::function sind sowieso immer gut.

    Eine Dokumentation zu Bibliotheksmitteln findest du meist in Boost, weil C++0x viele von dort übernimmt.


Anmelden zum Antworten