pimpl-idiom

    104熱度

    11回答

    背景: 的PIMPL Idiom(指針實現)是用於執行隱藏在其中一個公共類包裝的結構或類,可以不在庫的公共類是的一部分外部看到的技術。 這隱藏了庫的用戶的內部實現細節和數據。 實現此習語時,爲什麼要將公共方法放在pimpl類而不是公共類上,因爲公共類方法實現將編譯到庫中,而用戶只有頭文件? 爲了說明這段代碼,我們將Purr()實現放在impl類上,並將其包裝。 爲什麼不直接在公共課上實施Purr?

    1熱度

    5回答

    我試圖使用PIMPL方法隱藏一些蹩腳的模板代碼,但我不能給身體類朋友訪問手柄類派生類。我從MSVC 9 sp1中收到錯誤C2248。下面是一些代碼複製的錯誤: // // interface.hpp // namespace internal{ template<class T> class specific_body; } class interface {

    19熱度

    6回答

    據我所知,pimpl的習慣用法僅僅是因爲C++強迫你把所有的私有類成員放在頭文件中。如果頭只包含公共接口,理論上講,任何類實現的改變都不需要重新編譯程序的其餘部分。 我想知道的是爲什麼C++沒有被設計爲允許這樣的方便。爲什麼它要求所有類的私人部分公開顯示在標題中(沒有雙關語意思)?

    10熱度

    3回答

    Pimpl's是許多C++代碼中樣板的來源。它們看起來像是宏,模板和一些外部工具幫助可以解決的組合,但我不確定最簡單的方法是什麼。 I've seen templates有助於做一些提升但不是太多 - 你最終還是需要爲你想要包裝的每個類的方法編寫轉發函數。有更容易的方法嗎? 我在想象一個工具作爲make過程的一部分。你希望你的公共頭文件是pimpl的類,所以你提供了一些輸入文件,比如說pimpl.

    0熱度

    2回答

    我知道該怎麼做一個不透明物體在C++如下: // my_class.hpp class opaque_object; class my_class { my_class(); ~my_class(); opaque_object *m_opaque_object; }; // my_class.cpp #include <my_class.hpp> cl

    0熱度

    2回答

    在一個項目中,我們想要以某種方式包裝Boost Asio套接字,使用類或包裝.h不必包含boost頭文件。 我們通常使用包裝類的指針和轉發聲明。 FOWARD聲明: namespace boost { namespace asio { namespace ip { class udp; } } } 然後宣佈插座: sc

    0熱度

    2回答

    鏈接到Loki Pimpl的源代碼header。 我無法找到任何關於如何使用相同的文檔,任何人都可以解釋如何使用。 在頭文件中有以下函數做什麼。 PimplOwner ImplOf PimplOf RimplOf

    2熱度

    2回答

    我有一個包裝類,它的工作委託給一個pimpl,而pimpl是一個指向基類/接口的指針,沒有數據專門用幾種不同的方法。 像這樣: class Base { void doStuff=0; }; class Derived { int x,y; void doStuff() { x = (x+y*2)*x; //whatever

    1熱度

    2回答

    我正在使用C++/CLI(版本9.0)編寫.NET程序集,並且我想使用PIMPL慣用語以避免將不必要的內容放入公共頭中。不幸的是,當我嘗試着聲明一個類,然後使用一個跟蹤處理它,我得到連接器警告4248: 警告LNK4248:無法解析typeref令牌(0100000E)爲「MyNamespace.PrivateClass」;圖像可能無法運行 無論我使用CLI類還是本機類作爲實現類,這似乎都是這種情

    4熱度

    1回答

    實現此類的正確方法是什麼? //Header #include <boost/shared_ptr.hh> class MyClass { public: static foo() static foobar(); private: class pimpl; static boost::shared_ptr<pimpl> m_handle;