11
votes

Déclarations avant et partage_ptr

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: xxx

J'ai alors une fonction dans une autre classe qui Prend un objet IstarterPtr en tant qu'argument, disons: xxx

Comment puis-je déclarer istarterptr sans y compris istarter.h?

J'utilise c ++ 98 si cela est pertinent.


0 commentaires

4 Réponses :


11
votes

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: - xxx

Vous devez inclure < boost / partage_ptr.hpp> bien sûr


0 commentaires

2
votes

Bien que cela ajoutait un fichier d'en-tête, vous pouvez mettre cela dans un fichier d'en-tête séparé: xxx

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).

Il pourrait y avoir de meilleures solutions cependant.


0 commentaires

1
votes

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;


0 commentaires

2
votes

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 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.


0 commentaires