2010-05-11 68 views
3

我有一个头文件:智能指针类predeclaration

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

DeviceProxyPtr在不同的头文件中定义是这样的:

typedef SmartPtrC<DeviceProxyC> DeviceProxyPtr; 

我不想包括DeviceProxyPtr定义头。 如果返回类型是DeviceProxy *,我可以简单地使用预先声明class DeviceProxy。 有什么办法可以和我的智能指针类一样吗?

回答

2

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

但是,在这种情况下,它不是一个类,而是一个typedef。即使它是一个指针,也不能使用class DeviceProxy

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

+1

我只是想知道......你从哪里学到的?!可能只是通过查看标题来找到 – ereOn 2010-05-11 09:42:43

+0

? – stijn 2010-05-11 09:49:40