我正在開發一個庫,並希望爲我的用戶提供一個與隱藏在名稱空間中的真實實現分開的公共接口。這樣,我就可以只更改HiddenQueue類而不更改myQueue,它只會暴露給用戶。隱藏使用名稱空間的內部類實現
如果我將HiddenQueue的C++代碼放入myQueue.cpp文件,編譯器會抱怨說_innerQueue的類型不完整。我認爲鏈接器能夠解決這個問題。我在這裏做錯了什麼?
// myQueue.h
namespace inner{
class HiddenQueue;
};
class myQueue{
public:
myQueue();
);
private:
inner::HiddenQueue _innerQueue;
};
///////////////////////////
// myQueue.cpp
namespace inner{
class HiddenQueue{};
};
+1 PIMPL。這裏有一篇文章來自創造這個術語的人:http://www.gotw.ca/gotw/024.htm – 2010-05-11 14:41:41
嗯,在底線PIMPL招致一些運行時速度成本,併爲您提供便於維護和編譯速度的收益。無可否認,在一般情況下運行時速度成本並不是問題(如果不是這樣,你可能知道這很重要),但恕我直言,在代碼庫中不需要小於一定大小的PIMPL。 – Jon 2010-05-11 14:46:57