Par commun Je ne veux pas dire utilitaire, je veux dire un en-tête qui détient ENUMS que plusieurs types veulent utiliser, etc. p>
Par exemple, si plusieurs types peuvent avoir une couleur Je n'aime vraiment pas la création d'un en-tête contenant des choses comme celle-ci, car il semble que cela rend le code plus complexe. Je cherche les réflexions d'autres sur les techniques qu'ils utilisent lorsqu'elles rencontrent une situation comme celle-ci. S'ils utilisent une en-tête "commune", etc. p> code>, qui est une énumération, vous voudriez le faire disponible. Certaines personnes diraient de le mettre dans la classe qu'il "convient à", mais cela peut créer des problèmes de dépendance en-tête. P>
7 Réponses :
L'en-tête commune est correct tant qu'il n'y a que quelques personnes travaillant sur votre projet. Une fois que vous avez plus de 20 personnes, éditer ce fichier et la fusion des changements, vous commencez à avoir un cauchemar. P>
Peut-être une alternative serait peut-être d'avoir un color.h code> ou un fichier
commun / color.h code>, qui appliquerait une structure sur vos fichiers. p>
J'ai envisagé cela, mais avoir un fichier d'en-tête avec un énumé semble ... faux.
Pourquoi? Il conserve vos données séparées et faciles à afficher et à modifier.
(+1) Pour obtenir des conseils sonores, si vous allez avoir plusieurs personnes interférentes avec le fichier commun unique (- --ieie, s'il s'agit d'un fichier à chaud), essayez de la diviser en morceaux relativement plus froids ... vous pouvez toujours concaténer eux comme une étape de construction. Une telle séparation dans des fichiers plus froids vous aidera également à contrôler votre version.
"Une fois que vous avez plus de 20 personnes, éditer ce fichier et la fusionner - vous obtenez un cauchemar". Passer à git ;-)
Je suis maintenant convaincu que la séparation des énumes, etc. en différents fichiers d'en-tête est la voie à suivre.
Le déplacement des énumérations de la classe publique à leur propre en-tête peut également accélérer la compilation - si vous devez utiliser l'ENUM à partir d'une autre classe, vous viennent #incluez l'en-tête contenant l'énumération.
J'utilise toujours un fichier Par exemple, voici deux extraits de mon commun. p> commun.h code> qui ne change presque jamais et contient des définitions extrêmement susceptibles d'être nécessaires dans pratiquement tous les fichiers. Je pense que cela augmente la productivité afin de ne pas avoir à ouvrir un autre fichier .CPP et à copier la liste de tous les en-têtes que vous savez que vous aurez certainement besoin.
p>
J'ai commencé à utiliser
Oui,
Les en-têtes communs IMO sont une bonne pratique si vous les limitez à contenir de choses qui changent rarement em> comme si vous vous trouvez beaucoup d'édition de ce fichier, alors vous avoir des choses qu'il n'y parvient pas. p> p>
Personnellement, je ne suis pas un fan. P>
En règle générale, j'aime définir une constante utilisée une fois, à côté de l'endroit où elle est utilisée. Cela signifie que si je veux savoir quelle valeur la constante tient la constante, il est juste là pour moi de regarder. Cela signifie également que je n'ai besoin que de recompiler un fichier lorsque lesdites changements constants. P>
Il existe un cas pour un fichier d'en-tête constant si la constante ou le type est largement utilisé ou si une constante ou un type est partagée sur des modules. P>
Si vous voulez «Global» Enums, mettez-les ensuite dans leur propre espace de noms au lieu de polluer l'espace de noms global, E.G.:
// Types.h namespace MyTypes { enum Color { RED, BLUE, GREEN, }; }
p>personalement, je préfère garder les énumes associées à une classe mais YMMV. p> p>
Je préfère être explicite sur ce que chaque fichier de RPC a besoin. Je trouve qu'il est plus facile à long terme et qu'il empêche les en-têtes de «commun» de provoquer la reconstruction de fichiers quand ils n'ont pas besoin d'être. Au fur et à mesure que le projet grandit, avoir un «inclutant uniquement ce dont vous avez besoin», la stratégie peut aider à réduire les temps de construction. Le prix de ceci est une petite pensée lorsque vous construisez initialement une nouvelle classe. J'ai souvent des fichiers d'en-tête uniquement pour un seul énum ou dactyef et je suis même allant jusqu'à avoir une configuration de construction spéciale qui construit sans en-têtes précompilés et (puisque je travaille avec Visual Studio) utilise Au fil des ans, j'ai trouvé que cela fonctionner très bien pour maintenir les délais de construction et permettre au code d'être déplacé (dans les bibliothèques ou dans d'autres projets) ou construits pour des harnais de test. p>
J'en affiche des en-têtes communs comme un couplage inutile qui devrait être retiré et, pour être honnête, un signe de paresse et manque d'attention portée aux détails. P> #pragma hdrstop code> à Définissez mes en-têtes précompilés plutôt que de disposer de chaque fichier dont vous avez besoin d'inclure un fichier commun à cette fin. P>
Évitez-le! Créer que l'en-tête commun sera resultr dans un couplage serré entre les modules. Le Dr Bob Martin parle de couplage dans son livre de code propre et de sa série de conférences. En outre, en tant que chef d'équipe qui a connu la difficulté d'essayer de remplacer un module dans un système étroitement couplé, il craint vraiment! P>