2013-05-16 26 views
8

Kodumu yeniden düzenlemeye çalışıyorum, böylece çok sayıda başlık eklemek yerine ileriye dönük bildirimleri kullanıyorum. Bu konuda yeniyim ve boost :: shared_ptr ile ilgili bir sorum var. demek, o zaman argüman olarak bir IStarterPtr nesneyi alır başka bir sınıfta bir fonksiyonu varForward declarations ve shared_ptr

#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 

:

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

Ben ileriye olmadan IStarterPtr beyan nasıl

Aşağıdaki arayüze sahip Say IStarter.h dahil olmak üzere?

C++ 98 kullanıyorum, bu alaka düzeyindedir.

cevap

7

Paylaşılan işaretçileri ileri * aramak yok sürece türlerini ilan veya çalışmak -> onlara basitçe yazmaya çalışması gerekir böylece: -

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

Elbette <boost/shared_ptr.hpp> eklemeniz gerekir

2

co kaçınarak, daha sonra

#include <boost/shared_ptr.hpp> 

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

ile IStarter.h ve diğer başlığında hem de içerir: bir başlık dosyası eklemek istiyorum rağmen, ayrı başlık dosyasına koymak olabilir de çoğaltma (bu durumda oldukça küçük olsa da).

Yine de daha iyi çözümler olabilir.

1

bir yolu yoktur ancak dosyada artırmak başlığı dahil gerekir:

#include <boost/shared_ptr.hpp> 

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

// ... 

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

Sen ileri C++ ne yani ben genellikle bu durumda yapılacak olan 98 yılında typedefs beyan edemez çekin Ben ihtiyacım olan yazım hataları bir types.h dosyasına ya da benzer bir şey koymak. Bu şekilde, ortak tip kodu, sınıfın kendi tanımından ayrıdır.

İlgili konular