2010-05-11 107 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