Twój współpracownik się myli, powszechnym sposobem jest i zawsze było umieszczanie kodu w plikach .cpp (lub jakimkolwiek innym rozszerzeniu, które lubisz) i deklaracjach w nagłówkach.
Czasami wstawianie kodu do nagłówka ma pewne zalety, co może pozwolić na bardziej sprytne wstawianie przez kompilator. Ale jednocześnie może zniszczyć Twoje czasy kompilacji, ponieważ cały kod musi być przetwarzany za każdym razem, gdy jest uwzględniany przez kompilator.
Wreszcie, często denerwujące są okrągłe relacje między obiektami (czasem pożądane), gdy cały kod jest nagłówkiem.
Podsumowując, miałeś rację, on się myli.
EDYCJA: Myślałem o twoim pytaniu. Jest jeden przypadek, w którym to, co mówi, jest prawdą. szablony. Wiele nowszych „nowoczesnych” bibliotek, takich jak boost, intensywnie wykorzystuje szablony i często są one „tylko nagłówkami”. Należy to jednak zrobić tylko w przypadku szablonów, ponieważ jest to jedyny sposób, aby to zrobić.
EDYCJA: Niektórzy chcieliby trochę więcej wyjaśnień, oto kilka minusów pisania kodu „tylko nagłówek”:
Jeśli się rozejrzysz, zobaczysz, że sporo osób próbuje znaleźć sposób na skrócenie czasu kompilacji podczas pracy z boostem. Na przykład: Jak skrócić czas kompilacji za pomocą Boost Asio , który widzi kompilację 14s pojedynczego pliku 1K z dołączonym boostem. 14s może nie wydawać się „eksplodować”, ale z pewnością jest znacznie dłuższy niż typowy i może zsumować się dość szybko. W przypadku dużego projektu. Biblioteki tylko nagłówka wpływają na czasy kompilacji w dość wymierny sposób. Po prostu tolerujemy to, ponieważ wzmocnienie jest tak przydatne.
Ponadto istnieje wiele rzeczy, których nie można zrobić tylko w nagłówkach (nawet boost ma biblioteki, do których należy się połączyć w przypadku niektórych części, takich jak wątki, system plików itp.). Podstawowym przykładem jest to, że nie można mieć prostych obiektów globalnych w bibliotekach tylko nagłówkowych (chyba że skorzystasz z obrzydliwości, która jest singletonem), ponieważ napotkasz błędy definicji. UWAGA: Zmienne wbudowane w C ++ 17 sprawią, że ten konkretny przykład będzie wykonalny w przyszłości.
Na koniec, gdy używasz wzmocnienia jako przykładu kodu zawierającego tylko nagłówek, często pomija się ogromny szczegół.
Boost to biblioteka, a nie kod poziomu użytkownika. więc to nie zmienia się tak często. Jeśli w kodzie użytkownika umieścisz wszystko w nagłówkach, każda drobna zmiana spowoduje konieczność ponownej kompilacji całego projektu. To ogromna strata czasu (i nie dotyczy to bibliotek, które nie zmieniają się z kompilacji na kompilację). Kiedy dzielisz rzeczy między nagłówek / źródło, a jeszcze lepiej, użyj deklaracji przesyłania dalej, aby zmniejszyć liczbę dołączeń, możesz zaoszczędzić godziny ponownej kompilacji, jeśli zostaną dodane w ciągu jednego dnia.