簡體   English   中英

為什么C ++ boost包只包含.hpp文件?

[英]Why does the C++ boost package only contain .hpp files?

我是C ++的新手。 我剛剛下載了Boost庫來學習。 我想查看一些實現細節,所以我找了.cpp文件。 令我驚訝的是,到目前為止我還沒有找到任何東西。

似乎只有.hpp文件。 .cpp文件在哪里?

Boost文檔中

大多數Boost庫都是僅限標題的 :它們完全由包含模板和內聯函數的頭文件組成,並且在鏈接時不需要單獨編譯的庫二進制文件或特殊處理。

請參閱該鏈接以獲取不是標題的庫列表,並且必須單獨構建。 對於這些庫,.cpp文件位於Boost發行版的/ libs目錄中。 如果你有預編譯的軟件包,你將在/ lib目錄中找到已編譯的.lib文件。

.hpp文件是您必須包含在代碼中的標頭才能使用Boost類。 許多Boost庫只是標題庫; 所有實現都在.hpp文件中。 對於那些有源代碼的人,您只能將編譯后的版本視為.lib文件。

如果您下載Boost的源代碼發行版,它應該有幾個子目錄:

  • boost :包含.hpp標頭
  • lib :包含.lib文件(已編譯的實現細節)
  • libs :這些實現細節的來源

因為許多(但不是全部)庫是使用模板實現的,因此必須放在頭文件中。

很多Boost庫都是純粹的模板。 在之前的C ++標准中,已經有了關鍵字export,以允許開發人員將實現與接口分開。

令人遺憾的是,關鍵字從未完全起作用(從編譯器供應商的角度來看難以實現,並且很難將其用於開發人員)。 解決問題的一種方法是在頭文件中提供接口和實現,並避免實現文件。 順便說一句,有幾個Boost庫需要編譯和鏈接才能使用它,我打賭你會在這些庫中找到實現文件。

對於那些不是標題的,可以在libs子目錄中找到源文件。

我相信大多數Boost庫只在實際的頭文件中實現,正如之前的海報所提到的那樣。 如前所述,編譯后的實現代碼將與頭文件分開時作為單獨的庫文件包含在內。

你提到自己是C ++的新手,所以我認為值得一提的是這種類型的庫分發並不是Boost所特有的。 您使用的其他第三方庫和API可能以相同的方式構建; 你會發現只有頭文件和庫文件的包,沒有.c,.cxx,.cpp等文件。 這樣做有很多原因,包括隱藏庫功能的實現,以及允許共享庫每次加載到內存中。

本文可能有助於為您澄清一些事項:
http://www.learncpp.com/cpp-tutorial/a1-static-and-dynamic-libraries/

您可能正在查看預編譯的包,其中cpp文件以庫的形式提供,而不是源。 如果你真的抓住了源代碼,你會發現一些cpp文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM