I motivi principali per inserire un tipo in una classe / struct è per la metaprogrammazione del modello o se il tipo è privato per la classe. Altrimenti, basta metterlo vicino alla classe:
// Player.hpp
...
enum class PlayerState { RUN, WALK, STAND };
class Player {
public:
...
private:
PlayerState m_state;
};
In C ++, è normale che tu abbia alcune dichiarazioni di supporto per una classe. Quindi non è ragionevole applicare una dichiarazione per criterio di intestazione.
Mettere questa dichiarazione in un file separato può essere ragionevole se la PlayerState
è usata separatamente dal Player
. Ma dato questi nomi, è improbabile che sia così.
Le intestazioni separate sono particolarmente utili quando l'intestazione deve includere intestazioni aggiuntive per alcune dichiarazioni. Poiché il C ++ (al momento) non ha sistemi di moduli, anche i contenuti di quelle intestazioni diventano disponibili per chiunque includa l'intestazione che stai scrivendo, un impatto che vorremmo ridurre al minimo. Una soluzione alternativa a queste dipendenze dell'intestazione è quella di astrarre i dettagli delle definizioni di classe, ad es. utilizzando il polimorfismo (l'intestazione dichiara solo un'interfaccia mentre le classi di implementazione sono interne a un file .cpp) o utilizza l'idioma pImpl.