C++ 转发声明和共享\u ptr
我正在尝试重构我的代码,以便使用前向声明,而不是包含大量的头。我是新手,对boost::shared_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
#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;