Dobrą praktyką jest nie martwić się o strategię nagłówka, o ile się kompiluje.
Sekcja nagłówka twojego kodu jest tylko blokiem linii, na który nikt nie powinien nawet patrzeć, dopóki nie pojawi się łatwy do rozwiązania błąd kompilacji. Rozumiem pragnienie „poprawnego” stylu, ale tak naprawdę żadnego z tych sposobów nie można opisać jako poprawnego. Dołączenie nagłówka dla każdej klasy może powodować irytujące błędy kompilacji oparte na rozkazie, ale te błędy kompilacji odzwierciedlają również problemy, które może rozwiązać staranne kodowanie (choć prawdopodobnie nie warto tego naprawiać).
I tak, będą mieć te problemy zamówień opartych na raz zaczną się do friend
ziemi.
Możesz pomyśleć o problemie w dwóch przypadkach.
Przypadek 1: Masz niewielką liczbę klas oddziałujących ze sobą, powiedzmy mniej niż tuzin. Regularnie dodajesz te nagłówki, usuwasz je i w inny sposób modyfikujesz, w sposób, który może wpływać na ich wzajemne zależności. Jest to przypadek, który sugeruje twój przykład kodu.
Zestaw nagłówków jest na tyle mały, że rozwiązywanie problemów, które się pojawiają, nie jest skomplikowane. Wszelkie trudne problemy można rozwiązać, przepisując jeden lub dwa nagłówki. Martwienie się o strategię nagłówka polega na rozwiązywaniu problemów, które nie istnieją.
Przypadek 2: Masz dziesiątki klas. Niektóre klasy stanowią kręgosłup twojego programu, a przepisanie ich nagłówków zmusiłoby cię do przepisania / rekompilacji dużej części twojej bazy kodu. Inne klasy używają tego kręgosłupa do osiągania różnych celów. Jest to typowe ustawienie biznesowe. Nagłówki są rozmieszczone w katalogach i nie można realistycznie zapamiętać nazw wszystkiego.
Rozwiązanie: W tym momencie musisz pomyśleć o swoich klasach w logicznych grupach i zebrać te grupy w nagłówki, które powstrzymają cię od ciągłego #include
powtarzania. To nie tylko ułatwia życie, ale jest także niezbędnym krokiem do korzystania ze wstępnie skompilowanych nagłówków .
Skończyć #include
ing zajęcia nie są potrzebne, ale kogo to obchodzi ?
W takim przypadku Twój kod wyglądałby jak ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}