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

Ter*_* Li 12 c++ boost

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

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

raz*_*ebe 19

Boost文档中:

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

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


Gue*_*ero 9

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

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

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


tro*_*foe 6

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


Ale*_*zzi 5

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

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