Wie Parameter an unter-unter Funktionen weitergeben?



  • Hallo, ich bin dabei ein Programm zu machen, welches man per Konsole ausführen kann. Dabei kann man viele Einstellungen und Parameter wählen. Viele davon haben nur Auswirkungen auf unter-Funktionen von unter-Funktionen. Wenn ich die alle durchreiche wird die Parameterliste der einzelnen Funktionsdefinitionen recht lang.

    Gibt es da eine bessere Möglichkeit?
    Sollte man lieber globale Variablen nehmen?
    Alle Parameter in ein Object packen und das durchreichen?
    Eine config-Datei schreiben und diese jeweils auslesen?
    Oder bei langen Funktionsdefinitionen belassen?
    Oder etwas anderes tun?



  • Ich erzeugt mir in der Regel eine CmdLine-Klasse, die die Kommandozeilenswitches enthält und die auch den Parse-Code enthält (ich nehme da gerne boost::program_options) und sicherstellt, dass die Optionen richtig kombiniert sind. Ich kann dann das cmdLine-Objekt durchreichen (also 1 Parameter).

    Dabei stört natürlich, dass dann auf einmal deine Funktionen abhängig von diesem Konfigurationsobjekt werden. Also versuche ich dann, dieses Objekt eben möglichst nicht so weit durchzureichen, damit die einzelnen Funktionen möglichst nicht davon abhängen. Aber manchmal lässt sich es eben nicht vermeiden (oder würde viel Zeit kosten). Immerhin sieht man dann sofort, welcher Codeteil von der Konfiguration abhängt. Wenn man Dinge hat wie "Datei einlesen" und man nur den Dateinamen braucht, übergebe ich natürlich der entsprechenden Funktion nur den Dateinamen und nicht das gesamte cmdLine-Objekt. Es kommt also drauf an. Zu viele Argumente machen eine Funktion unlesbar Dann lieber das cmdLine-Objekt übergeben.

    Was tust du denn in der Unter-Unterfunktion? Wäre es ggf. sinnvoll, diese Funktionen selbst in irgendeiner Klasse zu kapseln? Dann könnte man bei dieser Klasse nach Konstruktion die entsprechenden Werte von der Kommandozeile setzen.

    Es kommt halt immer auf den konkreten Einzelfall an, finde ich.



  • Zusaetzlich zu boost::program_options moechte ich noch auf ProgramOptions.hxx von Fytch hinweisen.


Anmelden zum Antworten