2014-11-05 179 views
0

當搞亂STL和提升時,我總是看到名爲「detail」或「impl」的文件夾。 這些文件夾的用途是什麼?你怎麼知道這裏屬於什麼?什麼是「細節」和「impl」文件夾?

是接口這些只是私有實現?

+1

這就是爲了讓你擁有閃亮的公共接口而需要的所有骯髒的管道,是的。但是,找出你自己,你猜猜看,有人對這個問題的贊同並不能真正幫助你學習任何東西。 (只有看看你是否想知道如何實現這樣的東西。) – Deduplicator 2014-11-05 17:46:58

+0

你應該只關心文檔告訴你擔心的頭文件。 – 2014-11-05 17:47:45

+2

@remyabel:當然,但可以好奇(問)。有時候,你不必擔心它們(比如在一個bug的(罕見)情況下,你必須挖掘事物的膽量)。 – Cornstalks 2014-11-05 17:48:48

回答

6

什麼是這些文件夾的目的是什麼?

這些只是接口的私有實現嗎?

基本上,是的。正是在這種情況下,Boost和標準庫的實現通常會放入不屬於它們公開接口的部分的東西,但需要通過公共接口的實現來訪問。

你怎麼知道這裏屬於什麼?

這是一個難以回答的問題,因爲這意味着您可以從外部查看,得出關於這些目錄中的東西應該放在哪裏的結論。您應該將這些目錄視爲「內部無用戶可服務部件」的類比。你可以查看和徘徊,但你永遠不知道你會發現什麼,它甚至可以在Boost或C++環境的版本之間改變。

在這些目錄中直接在應用程序中使用頭文件是非常氣餒,並會導致不可移植的代碼,可以通過甚至輕微的升級突破,以提高或C++編譯器。

說了這麼多,沒有理由不能將這些目錄裏面探索,看東西引擎蓋下是如何工作的!

+0

這實際上是有道理的。謝謝你的直接答覆。 – Todd 2014-11-06 22:22:09

0

details文件夾是一種抽象技術,用於將不在您模塊的公共API中的成員移動到子名稱空間和子文件夾中以隱藏成員開發人員可能不關心的成員,並用於實現Private實施(pimpl)設計模式;由一個助推頭Herb Sutter發明的一種模式。 pimpl模式使用共享對象模型來創建跨平臺的pimpls,這些pimpls使用.ipp文件和大幅減慢編譯器的轉發聲明來實現boost(即impl)。 Piml主要用於處理依賴於系統時鐘,定時器,鎖,線程,圖形,音頻或自定義硬件等硬件和操作系統相關設備。

詳細文件夾和命名空間應該添加因爲它們使您的API更清潔,更模塊化,但有更清潔,更簡單,更優雅,符合UML的解決方案,並且PIMPL設計模式存在許多問題,使其無法實現最佳實踐。其中一些原因是:

  • 詳細信息的文件夾和命名空間結構需要更多的手工勞動和時間的工作。
  • Piml不符合UML標準,不適合測試驅動開發。
  • Pimpl顯着減慢編譯器。
  • 詳細信息文件夾和命名空間創建一個混亂的依賴關係圖與耦合問題。
  • 以上原因增加了軟件開發的成本。
  • Pimpl不需要編寫可移植的跨平臺和跨語言代碼。
  • 有一個乾淨的公共API只是Doxygen設置,命名約定和文件組織問題。

有關詳細解釋爲什麼您不應該使用詳細信息文件夾,請登錄Kabuki Toolkit Application Framework

相關問題