C++ 如何找到不包含任何平台特定代码的Boost库

C++ 如何找到不包含任何平台特定代码的Boost库,c++,boost,C++,Boost,对于我们当前的项目,我们正在考虑使用Boost框架 然而,该项目应该是真正的跨平台的,并且可能会被运送到一些异国平台。因此,我们只希望使用不包含任何平台特定代码的Boost包(库):纯C++,仅此而已。 Boost的思想是只使用头的包(库) 可以假设这些包(库)没有特定于平台的代码吗? 如果不是,有没有办法识别Boost?>P>的所有包。C++代码在某种程度上是平台特定的。一方面,有一个“纯标准C++代码”的理想概念,另一方面,存在着现实。大多数的升压库都是为了维护用户端的理想情况,这意味着你作

对于我们当前的项目,我们正在考虑使用Boost框架

然而,该项目应该是真正的跨平台的,并且可能会被运送到一些异国平台。因此,我们只希望使用不包含任何平台特定代码的Boost包(库):纯C++,仅此而已。 Boost的思想是只使用头的包(库)

可以假设这些包(库)没有特定于平台的代码吗?
如果不是,有没有办法识别Boost?

>P>的所有包。C++代码在某种程度上是平台特定的。一方面,有一个“纯标准C++代码”的理想概念,另一方面,存在着现实。大多数的升压库都是为了维护用户端的理想情况,这意味着你作为Boost的用户可以编写平台无关标准C++代码,而所有底层平台特定代码隐藏在那些升压库的内脏中(对于需要它们的人)。 但是,这个问题的核心是如何在现实世界中定义平台特定代码和标准C++代码。当然,您可以查看标准文档,并说除此之外的任何内容都是特定于平台的,但这只是一个学术讨论

如果我们从这个场景开始:假设我们有一个平台,它只有一个C++编译器和一个C++标准库实现,没有其他OS或OS特定的API来依赖其他不被标准库所覆盖的东西。那么,在这一点上,你仍然需要问自己:

  • 这是什么编译器?什么版本
  • 标准库实现是否正确?没有虫子
  • 这两个完全符合标准吗
据我所知,基本上没有普遍的答案,也没有现实的保证。大多数外来平台依赖于具有部分或不兼容标准库实现的外来(或旧)编译器,有时还具有自我施加的限制(例如,无异常、无RTTI等)。大量的“纯标准C++代码”永远不会编译在这些平台上。 然后,还有一个现实是,今天的大多数平台,甚至是非常小的嵌入式系统都有一个操作系统。绝大多数都在某种程度上符合POSIX(除了Windows,但Windows不支持任何外来平台)。因此,实际上,依赖于POSIX函数的特定于平台的代码实际上并没有那么糟糕,因为在大多数情况下,大多数异域平台都有它们

我想我在这里真正理解的是,你脑海中关于“纯C++与特定平台代码”的这条纯粹的分界线实际上只是一条想象中的分界线。每个平台(编译器+std-lib+OS+ext-libs)都位于对标准语言功能、标准库功能、操作系统API函数等的连续支持级别上。通过该度量,<强>所有C++代码是平台特定的< /强>。 唯一真正的问题是它撒下的网有多宽。例如,大多数Boost库(除了最近的“脆弱”库)一般都支持编译器,支持程度可以降到C++98的合理水平,许多甚至尝试支持早在90年代早期的编译器和std库

要知道一个库(Boost的一部分)是否对您预期的应用程序或平台有足够广泛的支持,您需要定义该支持的边界。仅仅说“纯C++”是不够的,它在现实世界中毫无意义。您不能说您将在使用Boost.Thread作为具有平台特定代码的库的示例之后使用C++11编译器。许多C++11实现对
std::thread
的支持非常薄弱,但其他实现则做得更好,而且这个问题与使用Boost.thread一样是“特定于平台的”问题

确保平台支持范围的唯一真正方法是实际设置能够提供代表性最坏情况的机器(例如,虚拟机、模拟器或真实硬件)。你必须根据对你的客户可能使用的东西的现实评估来选择那些最坏情况的机器,并且你必须使评估保持最新。您可以为您的特定项目创建使用特定(Boost)库的回归测试套件,并在所有最坏情况下的测试环境中测试该套件。没有通过测试的东西,没有通过测试,就这么简单。是的,您将来可能会发现某些Boost库在某些新的异国平台下无法工作,如果发生这种情况,您需要让Boost开发团队添加代码以支持它,或者您必须重新编写代码以绕过它,但这就是软件维护的全部内容,而且这是您必须预计的成本,这些问题不仅来自Boost,还来自操作系统和编译器供应商!至少,有了Boost,您可以自己修复代码并将其贡献给Boost,这在操作系统或编译器供应商身上是不可能做到的。

我们也讨论了“Boost与否”。我们决定不使用它

  • 我们有一些不典型的硬件平台,只有一个源代码。尤其是在AVR上运行boost是不可能的,因为boost在很多事情上都需要RTTI和异常,而RTTI和异常是不可用的
  • boost的某些部分使用特定于编译器的“hack”,例如获取有关类结构的信息
  • 我们尝试拆分包,但相互依赖性相当高(至少3或4年前)
与此同时,C++11正在进行中,GCC开始支持越来越多的应用程序。使用boost()的原因很多。我们从头开始实现了其余的需求(由于可变模板和o