2013-05-16 7 views
8

Sto cercando di ridefinire il mio codice in modo da utilizzare dichiarazioni di inoltro invece di includere molte intestazioni. Sono nuovo a questo e ho una domanda riguardante boost :: shared_ptr.Dichiarazioni di inoltro e shared_ptr

Say Ho la seguente interfaccia:

#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 

Ho poi una funzione in un'altra classe che prende un oggetto IStarterPtr come argomento, fare:

virtual void addStarter(IStarterPtr starter) 
{ 
    _starter = starter; 
} 
... 
IStarterPtr _starter; 

come faccio avanti dichiaro IStarterPtr colpo incluso IStarter.h?

Sto usando C++ 98 se questo è di pertinenza.

risposta

7

puntatori condivise lavorare con in avanti tipi dichiarato finché tu non chiami * o -> su di loro in modo da dovrebbe funzionare scrivere semplicemente: -

class IStarter; 
typedef boost::shared_ptr<IStarter> IStarterPtr; 

è necessario includere <boost/shared_ptr.hpp> ovviamente

2

Anche se sarebbe aggiungere un file di intestazione, si potrebbe mettere che in un file di intestazione separata:

#include <boost/shared_ptr.hpp> 

class IStarter; 
typedef boost::shared_ptr<IStarter> IStarterPtr; 

e poi includerlo sia in IStarter.h e nel vostro altro colpo di testa, evitando co de duplicazione (anche se in questo caso è piuttosto piccola).

Ci potrebbero essere soluzioni migliori però.

1

C'è una via, ma è necessario includere l'intestazione spinta nel file:

#include <boost/shared_ptr.hpp> 

class IStarter; 
typedef boost::shared_ptr<IStarter> IStarterPtr; 

// ... 

virtual void addStarter(IStarterPtr starter) 
{ 
     _starter = starter; 
} 
// ... 
IStarterPtr _starter; 
1

Non è possibile inoltrare dichiarare typedef in C++ 98 così quello che faccio di solito in questo caso è tirare fuori i typedef mi servono per inserirli in un file types.h o qualcosa di simile. In questo modo il codice di tipo comune è ancora separato dalla definizione della classe stessa.