前向声明和shared_ptr

Baz*_*Baz 10 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 boost::shared_ptr<IStarter> IStarterPtr;

#endif
Run Code Online (Sandbox Code Playgroud)

然后我在另一个类中有一个函数,它将一个IStarterPtr对象作为参数,比如说:

virtual void addStarter(IStarterPtr starter)
{
    _starter = starter;
}
...
IStarterPtr _starter;
Run Code Online (Sandbox Code Playgroud)

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

我正在使用C++ 98,如果这是相关的.

jco*_*der 9

只要你不对它们调用*或 - >,共享指针就可以使用前向声明的类型,所以它应该只是简单地写:

class IStarter;
typedef boost::shared_ptr<IStarter> IStarterPtr;
Run Code Online (Sandbox Code Playgroud)

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