Avant les déclarations et les shared_ptr
Je suis en train de revoir mon code pour que j'use de la déclaration au lieu de lots dont des en-têtes. Je suis nouveau à cela et avez une question concernant le boost::shared_ptr.
Dire que j'ai l'interface suivante:
#ifndef I_STARTER_H_
#define I_STARTER_H_
#include <boost/shared_ptr.hpp>
class IStarter
{
public:
virtual ~IStarter() {};
virtual operator()() = 0;
};
typedef boost::shared_ptr<IStarter> IStarterPtr;
#endif
Je puis avoir une fonction dans une autre classe qui prend un IStarterPtr objet comme argument, dire:
virtual void addStarter(IStarterPtr starter)
{
_starter = starter;
}
...
IStarterPtr _starter;
comment dois-je déclarer avant IStarterPtr sans IStarter.h?
Je suis en C++98, si c'est de la pertinence.
OriginalL'auteur Baz | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Partagé pointeurs de travail de l'avant, a déclaré types aussi longtemps que vous n'avez pas d'appel * ou -> sur eux, donc ça devrait marcher pour écrire simplement :-
Vous devez inclure
<boost/shared_ptr.hpp>
bien sûrOriginalL'auteur jcoder
Même si ce serait ajouter un fichier d'en-tête, vous pourriez mettre dans un autre fichier d'en-tête :
et de l'inclure à la fois dans IStarter.h et dans d'autres d'en-tête, en évitant la duplication de code (même si c'est assez faible dans ce cas).
Il existe peut-être de meilleures solutions.
OriginalL'auteur JBL
Vous ne pouvez pas déclarer avant typedefs en C++98, donc ce que j'ai l'habitude de faire dans ce cas est de sortir les typedefs j'ai besoin de les mettre dans une
types.h
fichier, ou quelque chose de similaire. De cette façon, le type le plus commun de code est toujours séparée de la définition de la classe elle-même.OriginalL'auteur Mark B
Il y a un chemin, mais vous devez inclure le coup de pouce de l'en-tête de votre fichier :
OriginalL'auteur Pierre Fourgeaud