Inline Funktionen oder besser ausgelagert?
-
Dann schrieb:
Ich hätte mal eine Frage dazu: Müssen Inlinefunktionen immer im Header definiert sein? Geht es nicht auch so:
//In der H-Datei: class kl { inline void fkt(); }; //In der CPP-Datei: void kl::fkt() { //... }
so wüste der compiler beim compilieren einer anderen cpp die diesen header includet nicht wie die implementiierung der funktion ist.
-
Dann schrieb:
Ich hätte mal eine Frage dazu: Müssen Inlinefunktionen immer im Header definiert sein? Geht es nicht auch so:
//In der H-Datei: class kl { inline void fkt(); }; //In der CPP-Datei: void kl::fkt() { //... }
Nein. Zumindest nicht wenn du fkt auch in anderen Übersetzungseinheiten (außer in der in der fkt definiert ist) aufrufen möchtest. D.h. sinnvoll ist die von dir gezeigte Anwendung überhaupt nur dann, wenn die inline Funktion private ist und die Klasse keine Long-Distance-Freundschaften pflegt.
-
Geht wenigstens das hier?
//Alles in der H-Datei: class kl { inline void fkt(); }; void kl::fkt() { //... }
Ich fände es nämlich ziemlich unordentlich, würde man es so schreiben:
//Alles in der H-Datei: class kl { inline void fkt() { //... } };
Vor allem, wenn man da noch mehr solcher Methoden hat.
-
Ja, das geht. Aber nochmal inline vor die Definition.
-
Dann schrieb:
Geht wenigstens das hier?
//Alles in der H-Datei: class kl { inline void fkt(); }; void kl::fkt() { //... }
Ich fände es nämlich ziemlich unordentlich, würde man es so schreiben:
//Alles in der H-Datei: class kl { inline void fkt() { //... } };
Vor allem, wenn man da noch mehr solcher Methoden hat.
ich finde beides unordentlich. da sehen dann die header aus wie mit einer implemenationsdatei gekreuzt.
lieber seperate datei anlegen
-
volkard schrieb:
tntnet schrieb:
Theoretisch könnte ich tatsächlich ein Programm schreiben, welches nur aus Headern besteht. Ich könnte auch auf so viele andere Sprachfeatures wie Schleifen (kann man durch goto ersetzen) oder Klassen (struct oder einfach mehrere Variable gehen auch). Da geht aber sehr viel verloren. Die Programme werden unleserlich und unwartbar.
das klingt, als würden funktionen im header die programme unwartbar machen. das ist nicht der fall.
Inline-Funktionen und -Methoden sollten in der Regel Einzeiler sein. Alles andere gehört in eine Cpp-Datei.
auch das ist nicht der fall. in sachen aufgeräumtheit und so gehört alles in den header in die klasse rein. so wie bei java. das mit dem auslagern in die cpp ist eine folge unseres übersetzungsmodells, keine forderung aus übersichtlichkeitsgrüden.
Ein Aufruf ist wirklich nicht so teuer. Eine bessere Programmstruktur ist weitaus wichtiger.
das, was ich unter programmstruktur verstehe, ist völlig unabhängig davon, wo die funktionen stehen.
@volkard
Da bin ich anderer Meinung! Die Trennung von Deklaration und Definition (einer Funktion) ist übersichtlicher. Das gilt zumindest dann, wenn ich eine Klasse nur verwenden möchte, also eigentlich nur die (public) Schnittstelle benötige. Das ist sehr aufwändig, wenn eine nichttriviale Klasse komplett inline ist. Sieh dir eine beliebige STL-Implementierung an, dann weißt du, was ich meine. Ich finde, Java ist in dieser Hinsicht kein Vorbild. Da funktioniert das nur einigermaßen, da es standardmäßig JavaDoc gibt...Stefan.