J'essaie de refacturer mon code afin que j'utilise des déclarations avant plutôt que d'inclure beaucoup d'en-têtes. Je suis nouveau à cela et j'ai une question concernant Boost :: Shared_ptr.
Dites que j'ai l'interface suivante: p> J'ai alors une fonction dans une autre classe qui Prend un objet IstarterPtr en tant qu'argument, disons: p> Comment puis-je déclarer istarterptr sans y compris istarter.h? P> J'utilise c ++ 98 si cela est pertinent. P> p>
4 Réponses :
Les pointeurs partagés fonctionnent avec des types déclarés avant tant que vous n'appelez pas * ou -> sur eux afin qu'il devrait simplement écrire: - Vous devez inclure < boost / partage_ptr.hpp> code> bien sûr p> p>
Bien que cela ajoutait un fichier d'en-tête, vous pouvez mettre cela dans un fichier d'en-tête séparé: puis l'inclure à la fois en istarter.h et dans votre autre en-tête, en évitant la duplication de code (Bien que ce soit assez petit dans ce cas). P> Il pourrait y avoir de meilleures solutions cependant. p> p>
Il y a un moyen mais vous devez inclure l'en-tête Boost dans votre fichier:
#include <boost/shared_ptr.hpp> class IStarter; typedef boost::shared_ptr<IStarter> IStarterPtr; // ... virtual void addStarter(IStarterPtr starter) { _starter = starter; } // ... IStarterPtr _starter;
Vous ne pouvez pas renvoyer déclarer typlefs en C ++ 98, donc ce que je fais habituellement dans ce cas, sortez-les des Typefs dont j'ai besoin de les mettre dans un fichier types.H code> fichier ou quelque chose de similaire. . De cette façon, le code de type commun est toujours séparé de la définition de la classe elle-même. P>