2014-07-17 31 views
1

我正在研究一個小型IO庫,其中接口的需求是已知的,但實現可能會改變。該庫應該讀取和寫入檔案格式以及存儲一些元數據。帶多個指針的Pimpl

我雖然關於使用pimpl,因爲它似乎很適合這項任務。我的問題是,如果實施可以分成兩個文件,如下面的例子:

class Writer 
{ 
private: 
    class WriterImpl; // Currently writes ZIP archives, but this can change 
    std::unique_ptr<WriterImpl> m_writerimpl; 
    class MetaImpl; // Currently uses XML 
    std::unique_ptr<MetaImpl> m_metaimpl; 
} 

這仍然使用pimpl模式?或者最好有一個指向WriterImpl類的指針,然後指向ZipWriterXMLWriter

+0

我們可以稱它爲Pimpls –

回答

2

那還在使用pimpl模式嗎?

那麼;嚴格沒有。 pimpl是關於隱藏關於你的實現的所有細節,除了你有一個 - 你有兩個impl指針,你有兩個單獨的實現類,如果你將來改變了這個細節,你會強制includers重新編譯(pimpl試圖避免的幾件事之一)。

但那並不必然意味着你不應該這樣做。模式和習語的應用應該務實而不是合法 - 它們的存在是爲了爲您服務,而不是相反!因此,請仔細思考並在您的應用程序的更廣泛環境中採取任何有意義的措施。

1

如果它們中的任何一個都是可選的,那麼使用兩個獨立的pimpls將是自然的。如果兩者都存在,你就不會獲得任何分離它們的東西 - 只是以正常方式使用一個Pimpl。