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

时间:2011-11-22 15:50:34

标签: c++ boost

我是C ++的新手。我刚刚下载了Boost库来学习。我想查看一些实现细节,所以我找了.cpp文件。令我惊讶的是,到目前为止我还没有找到任何东西。

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

7 个答案:

答案 0 :(得分:19)

来自Boost documentation

  

大多数Boost库都是仅限标题:它们完全由标题组成   包含模板和内联函数的文件,并且不需要   单独编译的库二进制文件或特殊处理时   链接。

请参阅该链接,以获取不是标题的库列表,并且必须单独构建。对于这些库,.cpp文件位于Boost distribution的/ libs目录中。如果你有预编译的软件包,你将在/ lib目录中找到已编译的.lib文件。

答案 1 :(得分:9)

.hpp文件是您必须包含在代码中的标头才能使用Boost类。许多Boost库只是标题库;所有实现都在.hpp文件中。对于那些有源代码的人,只能看到编译后的版本为.lib文件。

如果您下载Boost的源代码发行版,它应该有几个子目录:

  • boost:包含.hpp标题
  • lib:包含.lib文件(已编译的实现详细信息)
  • libs:这些实施细节的来源

答案 2 :(得分:6)

因为许多(但不是全部)库是使用模板实现的,因此必须放在头文件中。

答案 3 :(得分:5)

很多Boost库都是纯粹的模板。在之前的C ++标准中,已经有了关键字export,允许开发人员将实现与接口分开。

可悲的事实是关键字从未完全起作用(从编译器供应商的角度来看难以实现,并且很难将其用于开发人员)。解决问题的一种方法是在头文件中提供接口和实现,并避免实现文件。顺便说一句,有几个Boost库需要编译和链接才能使用它,我打赌你会在这些库中找到实现文件。

答案 4 :(得分:4)

对于那些不是标题的文件,源文件可以在libs子目录中找到。

答案 5 :(得分:3)

我相信大多数Boost库只在实际的头文件中实现,正如之前的海报所提到的那样。如前所述,编译后的实现代码将与头文件分开时作为单独的库文件包含在内。

你提到了C ++的新手,所以我认为值得一提的是,这种类型的库分发并不是Boost特有的。您使用的其他第三方库和API可能以相同的方式构建;你会发现只有头文件和库文件的包,没有.c,.cxx,.cpp等文件。这样做有很多原因,包括隐藏库功能的实现,以及允许共享库一次加载到内存中。

本文可能有助于为您澄清事项:
http://www.learncpp.com/cpp-tutorial/a1-static-and-dynamic-libraries/

答案 6 :(得分:2)

您可能正在查看预编译的包,其中cpp文件以库的形式提供,而不是源。如果你真的抓住了source,你会发现一些cpp文件。