Aufteilung Programmcode (+rapidxml)
-
Hallo
Ich möchte in meinem Projekt, bestehend aus vielen Funktionen (nicht objektorientiert) den Code vor allem der Übersichtlichkeit halber auf mehrer Dateien aufteilen.
Benutze ich da am besten einfach nur mehrere cpp Dateien? Oder packt man da normalerweise einfach einige Funktionen die zusammenpassen in eine Header-Datei und inkludiert die dann in der einzelnen cpp?Und wenn wir schon dabei sind. Wie groß würdet ihr den Aufwand abschätzen ein Projekt (1500-2000 LOC) von funktionaler Programmierung in objektorientierte umzuschreiben?
Und weil es sich nicht lohnt deswegen einen extra Thread aufzumachen: Gibt es bei rapidxml eine Funktion die zurückgibt wie viele Unterknoten ein Knoten hat? Konnte in der Dokumenation leider nichts finden.
Vielen Dank schonmal
Gruß Zaus
-
Zaus schrieb:
Benutze ich da am besten einfach nur mehrere cpp Dateien? Oder packt man da normalerweise einfach einige Funktionen die zusammenpassen in eine Header-Datei und inkludiert die dann in der einzelnen cpp?
Grundsätzlich kommen alle Dinge in Header, die über mehrere Module/Übersetzungseinheiten (das sind jeweils unabhängig kompilierte .cpp-Dateien mit allen inkludierten Headern) benötigt werden, also die Schnittstelle. Das trifft primär auf Klassen- und andere Typdefinitionen und Funktionsdeklarationen zu. Funktionsdefinitionen kommen in Implementierungsdateien (.cpp).
Zaus schrieb:
Und wenn wir schon dabei sind. Wie groß würdet ihr den Aufwand abschätzen ein Projekt (1500-2000 LOC) von funktionaler Programmierung in objektorientierte umzuschreiben?
Prozedural, nicht funktional!
Das ist wahrscheinlich nicht allzu viel Aufwand, aber sehr wenig ist es auch nicht. Kommt sehr drauf an, wie schön der Code ist und ob er sich einfach so ins objektorientierte Muster pressen lässt.
-
Üblicherweise werden da die Komponenten logisch getrennt. So dass du das includen kannst, was du brauchst und nicht noch mehr Overhead hast, welchen du nicht brauchst (deine Kompilierungszeit wird es dir Danken auch wenn das ohne templates usw. keine so grosse Rolle spielen dürfte).
Also packst du z.B die Mathematikfunktionen in einen Header und die für die Grafikausgabe in einen anderen usw. Einfach schön logisch trennen. In den Header platzierst du nur die Prototypen und in den Source Dateien implementierst du dann die Funktionen.
2000 Zeilen scheinen nicht so viel zu sein. Du musst ja nich die Funktionen neu schreiben, sondern lediglich logisch Gliedern und Daten und Funktionen, die darauf arbeiten zusammenfassen. Ist allerdings schwer zu sagen, ohne das Projekt zu kennen. Möglicherweise wäre es aber auch eher eine Qual das in ein OOP Schema zu pressen.
-
Vielen Dank, hab das mit der Aufteilung jetzt ganz gut hinbekommen.
Kann mir vielleicht noch jemand mit Radpidxml helfen. Wie kann ich herausfinden wie viele Unterknoten ein bestimmter Knoten hat? Kann dazu leider gar nichts finden.
Gruß Zaus
-
Mach beim nächsten Mal bitte einen neuen Thread auf, da die beiden Fragen nichts miteinander zu tun haben.
Soweit ich weiss bietet RapidXml diese Funktionalität nicht, das musst du manuell machen und vom ersten Knoten an alle Siblings selber zählen.
Was die RapidXml Iteratoren unterstützen weiß ich nicht, vielleicht kannst du std::distance benutzen, ich kenn mich damit allerdings nicht aus.