2012-03-12 63 views

回答

5

在您提供的鏈接中討論的上下文中的共享庫是.so(共享對象)文件(Windows上的.dll,動態鏈接庫)或靜態(.lib)庫。 Qt提供了這種庫;其他許多供應商/項目也是如此。要在另一個應用程序(例如您的應用程序)中使用它們,您的包括標題和鏈接針對該庫。

本文警告的內容是#include用戶可能沒有的頭文件 - 即不屬於您的項目的頭文件。請記住,爲了讓其他人使用新的「共享庫」,他們需要包含您提供的頭文件。如果該文件包含其他其他標題,但它們不會有錯誤。

爲避免此問題,請在執行(.cpp)文件中執行您的#include;這樣,它們對未來用戶是隱藏的。 Qt推薦使用"pointer-to-implementation" (pimpl)成語 - 所有實現細節對類的用戶都是隱藏的,包括實現所依賴的任何和所有頭文件。

即使您不全面使用pimpl,也可以輕鬆完成同樣的任務。我們的目標是在您的標題中僅顯示#include絕對必需的文件,希望您可以在庫中提供所有這些文件。

+0

但爲什麼要隱藏你想包含的文件?你不希望用戶意識到需求?你能給我一個頭部的例子,我想包括那不會被絕對要求? – chikuba 2012-03-12 21:22:16

+1

@chikuba假設你有一個永遠不需要直接使用的幫助類 - 它只對圖書館的膽量很重要。比如說,一個管理員類將映射指向字符串的指針作爲ID來保持組織。這不是圖書館公共界面的一部分。如果你在你的公共接口的頭文件中包含該文件,突然間*所有使用你的庫的人都知道它並需要訪問它。相反,如果你只在實現文件中包含'#',它就成爲.lib文件的一部分,用戶不必擔心它。 – tmpearce 2012-03-13 01:36:40

+0

哦,好吧。所以它被內置到lib文件中,即使它是一個外部的頭文件?我有一些標題頭文件,我真的依賴於 – chikuba 2012-03-13 02:39:10