Wenn ich eine Klasse mit kleinen Funktionen erstelle, die nicht viel bewirken, ist es akzeptabel, sie alle in die Header-Datei zu schreiben? Für eine bestimmte Klasse ist es nur die .h-Datei, die keine .cpp-Datei enthält.
Ja, das ist akzeptabel. Es wird sicherlich kompilieren. Aber auch, wenn es die Codeorganisation sauberer macht, dann kann das gut sein. Die meisten Vorlagendefinitionen sind aus der Notwendigkeit heraus bereits so, dass Sie nichts Unerhörtes tun. Es kann jedoch einige Nachteile dieser Klasse geben, die sich auf andere Klassen stützt. Wenn Sie die gesamte Definition in andere Dateien einschließen müssen, die die Klasse verwenden, kann dies zusätzliche Kompilierungszeit erfordern, als wenn Sie nur eine kurze Klassendeklaration haben.
Sie können Ihre Übersetzungszeiten messen, wenn dies ein echtes Problem zu sein scheint.
Wenn Sie eine Kopie erhalten können, Die C ++ Programmiersprache (und viele andere Bücher) haben einen detaillierten Abschnitt über die Quellcodeorganisation und die spezifischen Vorteile des Trennens von Code in .h- und .cpp-Dateien.
Es hängt davon ab, was Sie anstreben.
Für ein Haustier-Projekt ist es akzeptabel, aber dann ist alles wirklich.
Für ein echtes Projekt müssen Sie sich eine Reihe von Fragen stellen:
Wenn die Antworten Sie zufriedenstellen, dann gehen Sie weiter.
Es ist hauptsächlich eine Frage des Abhängigkeitsmanagements. Wenn Sie die Methodendefinition in den Header setzen, werden sie wahrscheinlich vom Compiler inline gesetzt, was bedeutet, dass Sie bei jeder Änderung alles neu kompilieren müssen, was von dieser Klasse abhängt.
Templates tun dies, allerdings haben Templates im Allgemeinen nur wenige Abhängigkeiten (andere Includes) und Sie sind relativ gezwungen, so zu verfahren (obwohl Sie external nicht Template-abhängigen Code verwenden können, um Abhängigkeiten zu reduzieren).
Für wirklich große Projekte, bei denen das Dependency Management im Vordergrund steht, würde ich davon abraten. In diesen Projekten sind eine stabile ABI und die Fähigkeit, binärkompatible Änderungen zu fördern, lebensrettend im Falle eines Problems und sie sind die "leichte" Unannehmlichkeit für den Entwickler wert.
Bitte definieren Sie auf keinen Fall die Methoden in der Klasse. Auch inline können Sie diese nach der Klassendeklaration definieren. Dies erleichtert es den Lesern (selbst in ein paar Monaten), die Oberfläche schnell zu verstehen.
Ja, es ist akzeptabel. Wenn Sie Vorlagen erstellen und keinen Compiler mit export
support haben, haben Sie keine Wahl.
Beachten Sie jedoch, dass dadurch die Abhängigkeiten erhöht werden können und die Kompilierung dadurch langsamer wird.