Une bonne pratique consiste à ne pas s'inquiéter de votre stratégie d'en-tête tant qu'elle est compilée.
La section d'en-tête de votre code est juste un bloc de lignes que personne ne devrait même regarder jusqu'à ce que vous obteniez une erreur de compilation facile à résoudre. Je comprends le désir d'un style "correct", mais aucune des deux ne peut vraiment être décrite comme correcte. L'inclusion d'un en-tête pour chaque classe est plus susceptible de provoquer des erreurs de compilation gênantes basées sur les commandes, mais ces erreurs de compilation reflètent également des problèmes qu'un codage soigneux pourrait résoudre (même si on peut dire qu'ils ne valent pas la peine d'être résolus).
Et oui, vous aurez ces problèmes liés aux ordres une fois que vous commencerez à vous immerger friend
.
Vous pouvez penser au problème dans deux cas.
Cas 1: Vous avez un petit nombre de classes en interaction, disons moins d'une douzaine. Vous ajoutez régulièrement, supprimez et modifiez ces en-têtes de manière à affecter leurs dépendances les unes par rapport aux autres. C'est le cas suggéré par votre exemple de code.
L'ensemble des en-têtes est suffisamment petit pour qu'il ne soit pas compliqué de résoudre les problèmes éventuels. Tous les problèmes difficiles sont résolus en réécrivant un ou deux en-têtes. S'inquiéter de votre stratégie d'en-tête, c'est résoudre des problèmes qui n'existent pas.
Cas 2: Vous avez des dizaines de cours. Certaines classes représentent l’épine dorsale de votre programme, et réécrire leurs en-têtes vous obligerait à réécrire / recompiler une grande partie de votre base de code. D'autres classes utilisent cette colonne vertébrale pour accomplir des choses. Cela représente un contexte commercial typique. Les en-têtes sont répartis sur des répertoires et vous ne pouvez pas vous rappeler de manière réaliste les noms de tout.
Solution: À ce stade, vous devez penser à vos classes dans des groupes logiques et regrouper ces groupes dans des en-têtes qui vous évitent d’être obligés de vous #include
répéter. Cela ne simplifie pas la vie, mais constitue également une étape nécessaire pour tirer parti des en- têtes précompilés .
Vous finissez par avoir des #include
cours dont vous n'avez pas besoin, mais qui s'en soucie ?
Dans ce cas, votre code ressemblerait à ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}