C++ 转发声明和共享\u ptr

C++ 转发声明和共享\u ptr,c++,shared-ptr,forward-declaration,c++98,C++,Shared Ptr,Forward Declaration,C++98,我正在尝试重构我的代码,以便使用前向声明,而不是包含大量的头。我是新手,对boost::shared_ptr有一个问题 假设我有以下界面: #ifndef I_STARTER_H_ #define I_STARTER_H_ #include <boost/shared_ptr.hpp> class IStarter { public: virtual ~IStarter() {}; virtual operator()() = 0; }; typedef bo

我正在尝试重构我的代码,以便使用前向声明,而不是包含大量的头。我是新手,对boost::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
如何在不包含IStarter.h的情况下转发声明istarterpr


如果相关的话,我使用的是C++98。

共享指针可以处理前向声明的类型,只要不调用*或->它们,那么只需编写:-

class IStarter;
typedef boost::shared_ptr<IStarter> IStarterPtr;
class-IStarter;
typedef boost::共享_ptr istarterpr;

当然,您需要包括

虽然它会添加一个头文件,但您可以将其放在一个单独的头文件中:

#include <boost/shared_ptr.hpp>

class IStarter;
typedef boost::shared_ptr<IStarter> IStarterPtr;
#包括
类IStarter;
typedef boost::共享_ptr istarterpr;
然后将其包含在IStarter.h和其他头文件中,以避免代码重复(尽管在本例中它非常小)


不过可能有更好的解决方案。

有一种方法,但您需要在文件中包含boost头:

#include <boost/shared_ptr.hpp>

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

// ...

virtual void addStarter(IStarterPtr starter)
{
      _starter = starter;
}
// ...
IStarterPtr _starter;
#包括
类IStarter;
typedef boost::共享_ptr istarterpr;
// ...
虚拟void addStarter(IStarterpt starter)
{
_起动器=起动器;
}
// ...
iSTARTERPT_启动器;

在C++98中不能向前声明typedef,因此在这种情况下,我通常要做的是拉出需要的typedef,并将它们放入
types.h
文件或类似文件中。这样,公共类型代码仍然与类本身的定义分离

#include <boost/shared_ptr.hpp>

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

// ...

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