智能指针类预先声明

时间:2010-05-11 09:10:01

标签: c++

我有一个头文件:

class A
{
public:
    DeviceProxyPtr GetDeviceProxy(); 
};

DeviceProxyPtr在不同的头文件中定义,如下所示:

typedef SmartPtrC<DeviceProxyC> DeviceProxyPtr;

我不想包含DeviceProxyPtr定义标头。 如果返回类型是DeviceProxy *,我可以简单地使用预先声明class DeviceProxy。 有没有办法用我的智能指针类做同样的事情?

1 个答案:

答案 0 :(得分:2)

它是一个具体的返回类型的事实没有区别。您可以转发声明返回类型。

但是,在这种情况下,它不是类,而是typedef。您无法使用class DeviceProxy,即使它是指针。

请注意,所有希望都不会丢失。前向声明的要点是避免拖入太多代码并减慢编译器的速度。标准的iostream库有着完全相同的问题。例如,istream实际上不是一个类,而是basic_istream实例化的typedef。标准库通过提供<iosfwd>标头来解决此问题,该标头向前声明basic_istream类模板,然后使用它来声明istream typedef。因此,与iostream交互的类只需要头文件中的#include <iosfwd>,然后在实现文件中只需要#include <iostream>