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