我有一个头文件:
class A
{
public:
DeviceProxyPtr GetDeviceProxy();
};
DeviceProxyPtr在不同的头文件中定义,如下所示:
typedef SmartPtrC<DeviceProxyC> DeviceProxyPtr;
我不想包含DeviceProxyPtr定义标头。
如果返回类型是DeviceProxy *,我可以简单地使用预先声明class DeviceProxy
。
有没有办法用我的智能指针类做同样的事情?
答案 0 :(得分:2)
它是一个具体的返回类型的事实没有区别。您可以转发声明返回类型。
但是,在这种情况下,它不是类,而是typedef。您无法使用class DeviceProxy
,即使它是指针。
请注意,所有希望都不会丢失。前向声明的要点是避免拖入太多代码并减慢编译器的速度。标准的iostream库有着完全相同的问题。例如,istream
实际上不是一个类,而是basic_istream
实例化的typedef。标准库通过提供<iosfwd>
标头来解决此问题,该标头向前声明basic_istream
类模板,然后使用它来声明istream
typedef。因此,与iostream
交互的类只需要头文件中的#include <iosfwd>
,然后在实现文件中只需要#include <iostream>
。