Ihr Mitarbeiter ist falsch, der übliche Weg war und ist es, Code in CPP-Dateien (oder eine beliebige Erweiterung) und Deklarationen in Headern einzufügen.
Es ist gelegentlich sinnvoll, Code in den Header einzufügen. Dies kann ein geschickteres Inlining durch den Compiler ermöglichen. Gleichzeitig kann dies Ihre Kompilierungszeiten zerstören, da der gesamte Code jedes Mal verarbeitet werden muss, wenn er vom Compiler aufgenommen wird.
Schließlich ist es oft ärgerlich, kreisförmige Objektbeziehungen zu haben (manchmal erwünscht), wenn der gesamte Code die Überschriften sind.
Fazit: Sie hatten Recht, er liegt falsch.
EDIT: Ich habe über Ihre Frage nachgedacht. Es gibt einen Fall, in dem das, was er sagt, wahr ist. Vorlagen. Viele neuere "moderne" Bibliotheken wie Boost verwenden häufig Vorlagen und sind häufig "nur Header". Dies sollte jedoch nur beim Umgang mit Vorlagen erfolgen, da dies die einzige Möglichkeit ist, dies beim Umgang mit Vorlagen zu tun.
EDIT: Einige Leute möchten etwas mehr Klarheit, hier sind einige Gedanken zu den Nachteilen beim Schreiben von "nur Header" -Code:
Wenn Sie sich umschauen, werden Sie eine Menge Leute sehen, die versuchen, einen Weg zu finden, um die Kompilierungszeiten beim Umgang mit Boost zu verkürzen. Beispiel: So reduzieren Sie die Kompilierungszeiten mit Boost Asio , bei dem eine 14-Sekunden-Kompilierung einer einzelnen 1K-Datei mit Boost angezeigt wird. 14s scheinen nicht "explodieren" zu sein, aber es ist sicherlich viel länger als typisch und kann sich ziemlich schnell summieren. Bei einem großen Projekt. Nur-Header-Bibliotheken wirken sich auf messbare Weise auf die Kompilierungszeiten aus. Wir tolerieren es einfach, weil Boost so nützlich ist.
Darüber hinaus gibt es viele Dinge, die nicht nur in Headern ausgeführt werden können (selbst Boost enthält Bibliotheken, mit denen Sie für bestimmte Teile wie Threads, Dateisysteme usw. verknüpfen müssen). Ein primäres Beispiel ist, dass Sie keine einfachen globalen Objekte in nur Header-Bibliotheken haben können (es sei denn, Sie greifen auf den Gräuel zurück, der ein Singleton ist), da Sie auf mehrere Definitionsfehler stoßen. HINWEIS: Mit den Inline-Variablen von C ++ 17 kann dieses Beispiel in Zukunft ausgeführt werden.
Als letzter Punkt wird bei Verwendung von Boost als Beispiel für Nur-Header-Code häufig ein großes Detail übersehen.
Boost ist eine Bibliothek, kein Code auf Benutzerebene. so oft ändert es sich nicht. Wenn Sie im Benutzercode alles in Kopfzeilen einfügen, müssen Sie bei jeder kleinen Änderung das gesamte Projekt neu kompilieren. Das ist eine enorme Zeitverschwendung (und gilt nicht für Bibliotheken, die sich nicht von Kompilieren zu Kompilieren ändern). Wenn Sie Dinge zwischen Header / Quelle und noch besser aufteilen und Forward-Deklarationen verwenden, um Includes zu reduzieren, können Sie Stunden der Neukompilierung sparen, wenn Sie diese über einen Tag addieren.