Форвардные объявления и shared_ptr

я пытаюсь реорганизовать свой код, чтобы я использовал предварительные объявления вместо включения большого количества заголовков. Я'Я новичок в этом и есть вопрос относительно boost :: shared_ptr.

Скажем, у меня есть следующий интерфейс:

#ifndef I_STARTER_H_
#define I_STARTER_H_

#include 

class IStarter
{
public:
    virtual ~IStarter() {};

    virtual operator()() = 0;
};

typedef boost::shared_ptr IStarterPtr;

#endif

Затем у меня есть функция в другом классе, которая принимает объект IStarterPtr в качестве аргумента, скажем:

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

как переслать объявление IStarterPtr без включения IStarter.h?

Я использую C ++ 98, если это актуально.

Ответы на вопрос(4)

вы можете поместить его в отдельный заголовочный файл:

#include <boost shared_ptr.hpp="">

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

а затем включите его как в IStarter.h, так и в другой заголовок, избегая дублирования кода (хотядовольно мало в этом случае).

Там могут быть лучшие решения, хотя.

t объявить typedefs в C ++ 98 так, что я обычно делаю в этом случае, это извлекаю typedefs, которые мне нужны, и помещаю их вtypes.h файл или что-то подобное. Таким образом, код общего типа по-прежнему отделен от определения самого класса.

#include <boost shared_ptr.hpp="">

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

// ...

virtual void addStarter(IStarterPtr starter)
{
      _starter = starter;
}
// ...
IStarterPtr _starter;
</istarter></boost>
Решение Вопроса

если вы не вызываете * или -> на них так должно работать просто написать:

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

Вы должны включить конечно

Ваш ответ на вопрос