Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Kopie einer Klasse unter anderem Namen  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
RHBaum
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.04.2003
Beiträge: 1158
Beitrag RHBaum Mitglied 12:09:00 14.05.2003   Titel:              Zitieren

Also ich hab mit dem kompletten Design so ... gewisse Anlaufschwierigkeiten ... zumindest finde ich es etwas ungewoehnlich !

Also zum prinzipiellen Problem .... du willst die Daten aus einer ini-Datei,aus /etc/myconfig auslesen, und bestimmte Eintraege (DB,host,uid,pass) haben. Und fuer dein Programm kommt nu noch ne weitere Datei hinzu, wo du auch paaar bestimmte EIntraege(head,body_head ...) draus brauchst.

Meine erste Frage, warum die statischen komponenten ? hat das nen besonderen Hintergrund ?

2. Frage ... die Ini Dateien haben den selben aufbau ? Ich denk mal ja ....

Strukturell wuerd ich so vorgehen!

1. eine klasse, das Zeielnweisse aus dateien lesen kann (dein Ini-file ist ne Zeilen-orientierte Text-Datei). Heisser Kanditat: ifstream

2. ne Klasse, die die Infos in strukturierter Form aus folgen von Zeilen interpretieren kann ... mit 1. als membervariable oder 1. als Basisklasse

3. ne klasse, die Infos in der gewuenschten Form im Speicher halten kann, in deinem Fall ne Art Dictionary in der Form Key:Value (beides strings, oder du arbeitest mit internen IDs fuer deine Special-Strings(uid,host,pass)). Hier kann man ganz gut Maps zu verwenden .... Vielleicht noch ne Unterteilung in die einzelnen sections .... als Submaps realisiert ...

4. ne Klasse, die die Faehigkeiten aller deiner vorherigen klassen kombiniert und fast das tut was du willst ... mit 2. und 3. als member ... mit ner parse( const char * astr_filename) Funktion, die DIr alle erkannten EIntraege aus der ini Datei rausliest und in den Container schreibt .... und mit ner get_property(const char * astr_key, const char * astr_section) Funktion, die nach gewuenschten einstellungen in dem Container suchen kann ....
DIe Parse Funktion vielleicht so ausgelegt, das man sie mehrmals aufrufen kann, und das sie die gefunden eintraege dem Container einfach hinzufuegt ....
Ne entsprechende Behandlungsroutine natuerlich, falls eintraege doppelt vorkommen ....

5. die Spezialklasse, als Ableitung von 4. die dann genau deine Speziellen Wuensche parametriesiert enthaelt .... also ini datei 1 und ini datei 2 fest verdrahtet, die das Parsen auf den Dateien schon beim konstruieren vornimmt ... und Memberfunktionen hat, die nach festverdrahteten Strings in den Property container suchen ... ala int get_uid(char ** ap_Value) ... oder so ....

So wuerde ich zumindest vorgehen ....

P.S. mer die /etc/myconfig parsen will, will meist auch etwas mit mysql anfangen .... hast dir mal die MySQL-C API (die MySQLC++ dann sicher auch) angeschaut, da gibt es zumindtest routinen, wo du die einstellungen, die der mysql client schon ausgelesen (geparst) hat, schon abfragen kann. koennte dir vielleicht das parsen der /etc/myconfig ersparen ...

Ciao ...

[ Dieser Beitrag wurde am 14.05.2003 um 12:14 Uhr von RHBaum editiert. ]
Peanut
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.04.2003
Beiträge: 97
Beitrag Peanut Mitglied 13:17:00 14.05.2003   Titel:              Zitieren

Zitat:
Original erstellt von RHBaum:
Also ich hab mit dem kompletten Design so ... gewisse Anlaufschwierigkeiten ... zumindest finde ich es etwas ungewoehnlich !


Ja, ungewöhnlich finde ich es auch! Aber der Increment-Operator verwendet doch auch einen nicht ausgewerteten int-Parameter zur Pre- und Post-Inkrement unterscheidung! Ich finde das ist vergleichbar.

Also zum prinzipiellen Problem .... du willst die Daten aus einer ini-Datei,aus /etc/myconfig auslesen, und bestimmte Eintraege (DB,host,uid,pass)
haben. Und fuer dein Programm kommt nu noch ne weitere Datei hinzu, wo du auch paaar bestimmte EIntraege(head,body_head ...) draus brauchst.
Meine erste Frage, warum die statischen komponenten ? hat das nen besonderen Hintergrund ?


Soooo "bestimmt" sind die Einträge nicht! Jede Klasse die was an Einstellungen braucht bekommt im INI-File ihre Section und der entsprechende Entwickler kann da an Infos ablegen was er will. Keiner muss sich über die Eindeutigkeit seines Parameternamens Gedanken machen weil der Parameter in SEINER Section steht. In der Klasse holt man sich einfach via
Code:
Config mysettings("mysectionname");
seinen Teil der Konfiguration und hat Zugriff auf seine Einstellungen.

I/O-Operationen sind EXTREM teuer! Das ganze INI-File wird einmal via mmap geholt, verarbeitet und steht dann in jeder Instanz zur verfühgung! Evtl. kann man den Instanzen Zeiger auf die Daten verpassen und je nach Bedarf auf unterschiedliche Daten verweisen. Der Parser könnte die Map erzeugen und einhängen, man bräuchte eine weitere Map für den Use-Counter und der Destruktor kann die Daten bei use-count==0 löschen, ähhh ne es kann ja sein das die Daten später nochmal gebraucht werden... ich kann die Daten-Map nieeee löschen :(

2. Frage ... die Ini Dateien haben den selben aufbau ? Ich denk mal ja ....
Sonst währe es alles Quark, nee?

Strukturell wuerd ich so vorgehen!
1. eine klasse, das Zeielnweisse aus dateien lesen kann (dein Ini-file ist ne Zeilen-orientierte Text-Datei). Heisser Kanditat: ifstream

Realisiert mit mmap. Da Konstrukte der Form
Code:
a=aaaaaaa\<Zeilenumbruch>
auchNochAaaaaaaaaaa\<Zeilenumbruch>
aaaaaaaa
möglich sein sollen (a<<EOF kommt auch noch ;)) ist die Datei zwar Zeilen-orientiert aber die Daten nicht!

2. ne Klasse, die die Infos in strukturierter Form aus folgen von Zeilen interpretieren kann ... mit 1. als membervariable oder 1. als Basisklasse
3. ne klasse, die Infos in der gewuenschten Form im Speicher halten kann, in deinem Fall ne Art Dictionary in der Form Key:Value (beides strings, oder du arbeitest mit internen IDs fuer deine Special-Strings(uid,host,pass)). Hier kann man ganz gut Maps zu verwenden .... Vielleicht noch ne Unterteilung in die einzelnen sections .... als Submaps realisiert ...

Code:
map<string, map<string, string>


4. ne Klasse, die die Faehigkeiten aller deiner vorherigen klassen kombiniert und fast das tut was du willst ... mit 2. und 3. als member ... mit ner parse( const char * astr_filename) Funktion, die DIr alle erkannten EIntraege aus der ini Datei rausliest und in den Container schreibt .... und mit ner get_property(const char * astr_key, const char * astr_section) Funktion, die nach gewuenschten einstellungen in dem Container suchen kann ....
DIe Parse Funktion vielleicht so ausgelegt, das man sie mehrmals aufrufen kann, und das sie die gefunden eintraege dem Container einfach hinzufuegt ....
Ne entsprechende Behandlungsroutine natuerlich, falls eintraege doppelt vorkommen ....

Ja, und die Klasse nenne ich dann Config... so habe ich es ja...

5. die Spezialklasse, als Ableitung von 4. die dann genau deine Speziellen Wuensche parametriesiert enthaelt .... also ini datei 1 und ini datei 2 fest verdrahtet, die das Parsen auf den Dateien schon beim konstruieren vornimmt ... und Memberfunktionen hat, die nach festverdrahteten Strings in den Property container suchen ... ala int get_uid(char ** ap_Value) ... oder so ....
Nachtigall ich hoehr dir trappsen... Habe bisher eher C Programmiert und mir fehlt die Objekt denke ein wenig.
Als ich geschrieben habe (erstes Posting 2.) Vererbung drückt ein "ist ein"-Verhältniss aus, Bjarne sagt bescheiss nie deinen Compiler und die beiden Klassen haben nichts miteinander zu tun :-( hätte ja mal einer sagen können "Ja, aber wenn sie beide die gleiche Funktion erfüllen, habe sie w*****einlich die gleiche Basisklasse!". Also Basisklasse IniFile, Subklasse
Code:
Config:public IniFile
, weil die Konfiguration "ist ein" IniFile, und Subklasse
Code:
Snippets:public IniFile
, weil die Snippets auch ein IniFile sind. Ja das passt... schön!

So wuerde ich zumindest vorgehen ....
Ja, ich glaube ich jetzt auch ;)

P.S. mer die /etc/myconfig parsen will, will meist auch etwas mit mysql anfangen ....
Ja neee, der Name ist nur spontan gewählt für "meine Konfiguration" halt. Mysql benutzen wir zwar auch, hat aber nichts mit dem Konfigfile zu tun...

Ciao ...
Yepp, und danke nochmal für den Schupps, den Rempler, das Tracktor-Pushing in die richtige Richtung. Manchmal braucht man halt so einen Wink mit dem Zaunpfahl, Dachpfetten, ...
c++.de :: C++ (auch C++0x und C++11) ::  Kopie einer Klasse unter anderem Namen  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.