La buona pratica è non preoccuparti della tua strategia di intestazione finché compila.
La sezione di intestazione del tuo codice è solo un blocco di linee che nessuno dovrebbe nemmeno guardare fino a quando non ottieni un errore di compilazione facilmente risolto. Capisco il desiderio di uno stile 'corretto', ma in nessun modo si può davvero definirlo corretto. Includere un'intestazione per ogni classe è più probabile che causi fastidiosi errori di compilazione basati sugli ordini, ma gli errori di compilazione riflettono anche i problemi che potrebbero essere risolti con un'attenta codifica (anche se probabilmente non valgono la pena risolvere il problema).
E sì, avremo quei problemi basati sugli ordini una volta che inizi a salire su friend
land.
Puoi pensare al problema in due casi.
Caso 1: hai un piccolo numero di classi che interagiscono tra loro, diciamo meno di una dozzina. aggiungi, rimuovi da, e in altro modo modifica queste intestazioni, in modi che possono influenzare le loro dipendenze l'una dall'altra. Questo è il caso suggerito dal tuo esempio di codice.
Il set di intestazioni è abbastanza piccolo da non complicare la risoluzione di eventuali problemi. Qualsiasi problema difficile viene risolto riscrivendo una o due intestazioni. Preoccuparti della tua strategia di intestazione significa risolvere problemi che non esistono.
Caso 2: Hai dozzine di classi. Alcune delle 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. Questo rappresenta una tipica impostazione aziendale. Le intestazioni sono distribuite tra le directory e non è possibile ricordare realisticamente i nomi di tutto.
Soluzione: a questo punto, devi pensare alle tue classi in gruppi logici e raggruppare quei gruppi in intestazioni che ti impediscono di dover ricorrere a #include
ancora e ancora. Questo non solo semplifica la vita, ma è anche un passo necessario per sfruttare le intestazioni precompilate .
Finisci con #include
di classi che non ti servono ma chi se ne frega ?
In questo caso, il tuo codice sarà simile a ...
#include <Graphics.hpp>
struct Entity {
Texture texture;
RenderObject render();
}