La buona pratica è quella di non preoccuparsi della tua strategia di intestazione fintanto che si compila.
La sezione header del tuo codice è solo un blocco di righe che nessuno dovrebbe nemmeno guardare fino a quando non ottieni un errore di compilazione facilmente risolvibile. Capisco il desiderio di uno stile "corretto", ma nessuno dei due modi può davvero essere descritto come corretto. Includere un'intestazione per ogni classe è più probabile che causi fastidiosi errori di compilazione basati sull'ordine, ma questi errori di compilazione riflettono anche problemi che potrebbero essere corretti da un'attenta codifica (anche se probabilmente non valgono il tempo per risolvere).
E sì, si dovrà avere quei problemi di ordine basato su una volta che si avvia sempre in friend
paese.
Puoi pensare al problema in due casi.
Caso 1: hai un numero limitato di classi che interagiscono tra loro, diciamo meno di una dozzina. Aggiungete, rimuovete e modificate regolarmente queste intestazioni, in modo tale da influire sulle loro dipendenze. Questo è il caso suggerito dal tuo esempio di codice.
L'insieme delle intestazioni è abbastanza piccolo da non complicare la risoluzione di eventuali problemi. Eventuali problemi difficili vengono risolti riscrivendo una o due intestazioni. Preoccuparsi della tua strategia di intestazione è risolvere i problemi che non esistono.
Caso 2: hai decine di lezioni. Alcune classi rappresentano la spina dorsale del tuo programma e riscrivere le loro intestazioni ti costringerebbe a riscrivere / ricompilare una grande quantità della tua base di codice. Altre classi usano questa spina dorsale per realizzare cose. Ciò rappresenta una tipica impostazione aziendale. Le intestazioni sono distribuite in tutte le directory e non puoi realisticamente ricordare i nomi di tutto.
Soluzione: a questo punto, devi pensare alle tue classi in gruppi logici e raccogliere quei gruppi in intestazioni che ti impediscono di dover #include
ripetere ancora e ancora. Non solo questo semplifica la vita, ma è anche un passaggio necessario per sfruttare le intestazioni precompilate .
Ti #include
ritrovi in lezioni che non ti servono ma a chi importa ?
In questo caso, il tuo codice sarebbe simile a ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}