Konzeptfrage zu Einstellungsspeicherung



  • Hallo,

    ich entwickle gerade ein Programm fürs Studium, bei dem man diverse Einstellungen machen kann, um das Aussehen des Programms zu verändern.

    Es könne nauch noch andere Einstellungen gemacht werden.

    Ich habe jetzt die Idee, eine Klasse "Config" zu implementieren und dort alle Einstellungen abzulegen.

    Was haltet ihr davon?

    Konzeptor



  • Klar, mach ruhig.



  • Eine Kontainerklasse fuer Speicherzwecke ist stets geeignet, wie ich finde. Ideal zumindest dann, wenn man die Einstellungen auch einheitlich in Dateien, Datenstroeme usw. ablegen / speichern ud aus selbigen wieder einlesen / laden moechte.



  • Also wenn du einfache Einstellungen speichern willst, welche du auch z.B. ganz einfach und schnell mit einem Editor auch verändern willst, dann nimm lieber ini-Dateien.

    Die Klasse TIniFile ist optimal dafür! Die Registirierung würde auch gehen, aber ist nicht so gut meiner Meinung mach.

    Aber wenn du Sachen in binär oder so speichern willst, dann empfehle ich die Sache mit den Klassen, wie oben angesprochen.



  • Ich würds per XML machen. Was genau sind denn deine Einstellungen? Sind das eher allgemeine Einstellungen wie zB Programmsprache oder geht das soweit runter, dass du für jedes GUI Element einzelne Attribute verändern kannst (Vorder- und Hintergrundfarbe, Schriftart, Schriftgrösse, etc.) ?



  • DocShoe schrieb:

    Ich würds per XML machen.

    Warum?
    Ich halte hier das ini-Format für deutlich besser (kürzer und besser lesbar).



  • Braunstein schrieb:

    DocShoe schrieb:

    Ich würds per XML machen.

    Warum?
    Ich halte hier das ini-Format für deutlich besser (kürzer und besser lesbar).

    Wie gesagt, hängt davon ab, wie umfangreich das Ganze wird. Je grösser die Einstellungsdatei wird, desto eher würde ich XML benutzen. Die INI Datei ist nur dann gut lesbar, wenn flache Hierachien beschrieben werden, bei Baumstrukturen mit mehreren Ebenen kann man XML mMn besser lesen.



  • Hi,

    es handelt sich lediglich um ein paar AnsiStrings und TColor-Werte.
    Später vllt. noch ein paar Ints oder so... Aber arg viel mehr kommt da nicht.

    Mir ging es jetzt auch eher um die Verwaltung innerhalb des Programms, nicht um die dauerhafte Speicherung (Die ich erst später implementieren werde)

    Ich habe mir das so überlegt (Code nicht getestet)

    class Config
    {
      private:
        TColor colors[100];      //Oder wieviele ich auch brauche
        AnsiString strings[100];
        int zahlen[100];
    
      public:
       TColor getColor(int key);
       void   setColor(int key, TColor value);
       //....
    };
    

    Wäre das so üblich?

    Ich muss praktisch für jeden Datentyp ein Array anlegen. Geht das nicht einfacher?

    Konzeptor



  • Nimm statt der C-style Arrays lieber eine std::map. Das ist ein Container, der Elemente paarweise als key/value speichert und Zugriff auf Elemente über ihren Key ermöglicht. Ausserdem wächst der Container automatisch mit, sodass ohne Änderung am Quelltext auch 10.000 statt 1.000 Elemente gespeichert werden können.



  • Ok.
    Dann brauche ich aber trotzdem für jeden Datentyp eine Map, oder?

    Ist es irgendwie möglich, alles in ein Array bzw. eine Map zu speichern und dann einheitlich darauf zuzugreifen?

    So wie in PHP, da kann ich alles schön in ein Array packen 🙂

    Konzeptor



  • Wie willst du denn einheitliche Zugriffe auf verschiedene Typen realisieren?
    Es gibt natürlich Typen wie Variant oder boost::any die sowas ermöglichen. Sonderlich sinnvoll erscheint es mir nicht.


Anmelden zum Antworten