我试图重构我的代码,以便使用前向声明而不是包含许多 header 。我对此并不陌生,并且对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

然后,我在另一个类中有一个函数,该函数将IStarterPtr对象作为参数,例如:
virtual void addStarter(IStarterPtr starter)
{
    _starter = starter;
}
...
IStarterPtr _starter;

如何在不包含IStarter.h的情况下声明IStarterPtr?

如果相关,我正在使用C++ 98。

最佳答案

只要您不对它们声明*或->,共享指针就可以与正向声明的类型一起使用,因此只需编写以下内容即可:

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

您当然需要包括<boost/shared_ptr.hpp>

07-24 09:23