Funktionskörper in header



  • drakon schrieb:

    Die Standardbibliothek macht das ja praktisch auch so. (Wenn aber aus einem anderen Grund)

    Wie genau macht die Standardbibliothek es eigentlich?



  • It0101 schrieb:

    Gibt es da ne andere Möglichkeit, das Zeug ohne Fehler/Warnungen gebaut zu kriegen?

    Schreib inline davor.

    Für eine gute Idee halte ich es dennoch nicht, ich würde einfach eine Library draus machen.



  • Bashar schrieb:

    It0101 schrieb:

    Gibt es da ne andere Möglichkeit, das Zeug ohne Fehler/Warnungen gebaut zu kriegen?

    Schreib inline davor.

    Für eine gute Idee halte ich es dennoch nicht, ich würde einfach eine Library draus machen.

    wieso soll das keine gute idee sein?

    und die standard-lib implementierungen, setzen auch vor jede fkt ein inline, damit die ODR nicht verletzt wird.

    bb



  • Ich denke, dass es auf die Menge des Codes ankommt. Und es geht jetzt nicht darum, dass Code aufgebläht würde, was nicht der Fall sein sollte, wenn der Compiler da ein wenig mitdenkt, sondern eher rein vom Stil her. Wenn es wirklich eine Menge an Code ist, würde ich auch eher eine Lib dafür machen, welche das ganze schön verpackt usw. Andernfalls, wenn es wirklich nur ein paar Sachen sind, kann man die doch getrost in einen Header packen, den man included.



  • unskilled schrieb:

    wieso soll das keine gute idee sein?

    Weil es sich negativ auf die Kompilierzeit auswirkt. Einerseits durch das zusätzliche Parsen des grösseren Headers, andererseits muss Anwendungscode auch neu kompiliert werden, wenn nur die Implementierung geändert wird.

    unskilled schrieb:

    und die standard-lib implementierungen, setzen auch vor jede fkt ein inline, damit die ODR nicht verletzt wird.

    In der Standardbibliothek sind auch sehr viele Klassen und Funktionen Templates, da muss die Definition im Header stehen.



  • Nexus schrieb:

    unskilled schrieb:

    wieso soll das keine gute idee sein?

    Weil es sich negativ auf die Kompilierzeit auswirkt. Einerseits durch das zusätzliche Parsen des grösseren Headers, andererseits muss Anwendungscode auch neu kompiliert werden, wenn nur die Implementierung geändert wird.

    an der kompilierzeit ändert sich wohl im Vergleich nur etwas, wenn man pch nutzt und dort die datei included und die dann ändert. oder ne extrem große übersetzungseinheit die datei included - ansonsten ists komplett vernachlässigbar.
    das wäre dann zwar ärgerlich, aber ich find es besser als ne lib neu bauen zu müssen und dann noch die alte durch die neue ersetzen zu müssen.

    den zusatzaufwand beim ins projekt einbinden vs. nur includen, braucht man da noch gar nicht extra zu betrachten...

    Nexus schrieb:

    unskilled schrieb:

    und die standard-lib implementierungen, setzen auch vor jede fkt ein inline, damit die ODR nicht verletzt wird.

    In der Standardbibliothek sind auch sehr viele Klassen und Funktionen Templates, da muss die Definition im Header stehen.

    Jopp - wollt ich auch gar nich bestreiten - er hatte nur gefragt: "Wie genau macht die Standardbibliothek es eigentlich?"

    bb



  • Schön, dass sich hier noch eine kleine kontroverse Diskussion entwickelt hat.

    Also ich hab es nur aus dem Grund gemacht, um nicht ständig .cpp-Files zu Projekte hinzufügen zu müssen. Es ist wirklich nur eine Sammlung kleinerer nützlicher Funktionen. Es sind keine Klassen dabei. Templates sind auch einige dabei, aber bei denen ist es ja Standard.

    Wobei ich schon etwas überrascht bin. Normalerweise kommt Sourcecode ja nicht in Headerfiles 😉 Ich hatte eigentlich erwartet, dass ich hier ordentlich contra bekomme 🙂



  • Auch wenn ich grundsätzlich denke, dass man das durchaus im Header machen darf, finde ich, dass es ja nicht so schlimm ist da halt auch einen Ordner noch einzubinden, welcher halt noch ein paar Source Dateien mehr hat.

    Mache ich selber auch so. Da habe ich ein Framework, welches in jedem Projekt als Source kompiliert wird (weil ich doch auch ständig noch was ändere) und da muss ich einfach einen Ordner einfügen, welcher mir dann alle anderen Datien enthält. Kostet mich nicht einmal eine Minute bei der Erstellung des Projektes.



  • drakon schrieb:

    Auch wenn ich grundsätzlich denke, dass man das durchaus im Header machen darf, finde ich, dass es ja nicht so schlimm ist da halt auch einen Ordner noch einzubinden, welcher halt noch ein paar Source Dateien mehr hat.

    Mache ich selber auch so. Da habe ich ein Framework, welches in jedem Projekt als Source kompiliert wird (weil ich doch auch ständig noch was ändere) und da muss ich einfach einen Ordner einfügen, welcher mir dann alle anderen Datien enthält. Kostet mich nicht einmal eine Minute bei der Erstellung des Projektes.

    Vermutlich hast du Recht. Ich denke es wird bei mir auch auf eine solche Lösung hinauslaufen, weil ich auch noch einige Klassen habe, die ich öfter benötige und die will ich keinesfalls nur in einer Header-Datei unterbringen...



  • drakon schrieb:

    Auch wenn ich grundsätzlich denke, dass man das durchaus im Header machen darf, finde ich, dass es ja nicht so schlimm ist da halt auch einen Ordner noch einzubinden, welcher halt noch ein paar Source Dateien mehr hat.

    Habe ich mir auch heuer angewöhnt. Das Verzeichnis ist in den meisten Projekten nur als symlink drin, bei fertigen Projekten als Kopie.
    Was ich noch brauche, ist ein makefile pder ein make, das angangs nur die main.cpp compilieren will, aber zu jedem benutzen header foo.hpp auch die foo.cpp miterstellt.



  • volkard schrieb:

    drakon schrieb:

    Auch wenn ich grundsätzlich denke, dass man das durchaus im Header machen darf, finde ich, dass es ja nicht so schlimm ist da halt auch einen Ordner noch einzubinden, welcher halt noch ein paar Source Dateien mehr hat.

    Habe ich mir auch heuer angewöhnt. Das Verzeichnis ist in den meisten Projekten nur als symlink drin, bei fertigen Projekten als Kopie.
    Was ich noch brauche, ist ein makefile pder ein make, das angangs nur die main.cpp compilieren will, aber zu jedem benutzen header foo.hpp auch die foo.cpp miterstellt.

    Hmm das klingt gut. Da muss ich mal schauen, ob ich das Eclipse irgendwie beigebracht kriege 😉



  • volkard schrieb:

    drakon schrieb:

    Auch wenn ich grundsätzlich denke, dass man das durchaus im Header machen darf, finde ich, dass es ja nicht so schlimm ist da halt auch einen Ordner noch einzubinden, welcher halt noch ein paar Source Dateien mehr hat.

    Habe ich mir auch heuer angewöhnt. Das Verzeichnis ist in den meisten Projekten nur als symlink drin, bei fertigen Projekten als Kopie.

    Warum symlink? - Natürlich ist eine Möglichkeit, aber ich find es noch recht gut einfach nur den Pfad anzugeben (welcher in Wirklichkeit in ein anderes Projekt verweist). Ist ja eigentlich das selbe auf einer anderen Ebene, aber so habe ich keine Probleme, wenn ich viel synce.


Anmelden zum Antworten