Éviter de déclarer des fonctions privées dans la catégorie fichiers d'en-tête C++(C++)
(En C++) j'ai une classe dont la structure est déclarée dans un fichier d'en-tête. Que fichier d'en-tête est inclus dans beaucoup de fichiers source, telle que quand j'edit, j'ai besoin de recompiler les fichiers.
La classe dispose d'un ensemble de fonctions privées qui ne sont appelés dans un fichier source. Actuellement, ils sont déclarés dans la structure de classe dans le fichier d'en-tête. Lorsque j'ajoute une nouvelle fonction de ce type, ou de modifier les arguments, il entraîne donc une recompilation des lots de fichiers. Je tiens à déclarer les fonctions quelque part d'autre, de sorte que seul le fichier qui définit les appelle est recompilé (pour gagner du temps). Ils doivent encore être en mesure d'accéder à l'intérieur de variables de classe, cependant.
Comment puis-je y parvenir?
- Il y a des approches qui fonctionnent bien si j'avais écrit la classe à partir de zéro. Cependant, je ne suis pas commencer à partir de zéro; cette classe est déjà écrit.
Vous devez vous connecter pour publier un commentaire.
Utiliser le pImpl idiome - Votre classe visible en garde un pointeur vers le réel classe et transfère les appels aux fonctions membres publiques.
EDIT: En réponse aux commentaires
Garder la mise en œuvre effective de votre classe dans
FooImpl
-Foo
devrait avoir une copie de la public membres deFooImpl
et simplement transférer les appels vers ces. Tous les utilisateurs comprennent uniquement "Foo.h" - vous pouvez modifier toutes les informations privées deFooImpl
sans que les utilisateurs deFoo
de voir tous les changements.class FooImpl; class Foo { public: void bar(); FooImpl * Impl; };
.rpc:#include "FooImpl.h" ... void Foo::bar() { Impl->bar(); }
Il n'y a aucun moyen de déclarer des fonctions membres d'une classe à l'extérieur de la principale déclaration de classe. Donc, si vous voulez déclarer, à l'extérieur de la classe en question, les fonctions qui peuvent accéder aux variables membres d'une instance particulière de la classe, alors je ne vois pas d'autre alternative que de passer cette instance à la fonction. En outre, si vous voulez les fonctions pour être en mesure d'accéder au contenu privé et protégé les variables que vous aurez besoin de les mettre dans une nouvelle classe et de faire de la classe d'origine à un ami de que. E. g.
en-tête.h:
impl.cpp:
int var
dansclass Foo
. N'est pas le point de l'ensemble de la question est de le déplacer àclass FooImpl
?Vous êtes à la recherche pour Compilateur De Pare-Feu, une.k.un. PIMPL?
Créer une classe de base abstraite qui ne contient que les fonctions publiques et de référence dans vos en-têtes. Créer votre véritable classe comme une mise en œuvre ailleurs. Seuls les fichiers source qui ont besoin de créer votre besoin de classe pour voir l'application en-tête de classe.