提升精简版?
Posted
技术标签:
【中文标题】提升精简版?【英文标题】:boost lite? 【发布时间】:2009-01-13 22:23:09 【问题描述】:我听说有一个简单的 boost 实现,它只有智能指针和一些其他非常基本的东西。我想我听说它也不使用任何操作系统功能。我试图寻找它,但什么也没找到。有谁知道它叫什么或者不需要操作系统调用的 boost 风格的智能指针的实现?
【问题讨论】:
【参考方案1】:您可以使用 bcp,但请记住,使用 Boost 库只会让您为所使用的内容付费 - 智能指针都以仅标头的方式实现,这意味着没有操作系统调用,没有要链接到的编译库等。因此,如果您不分发源代码,则可以下载完整的 boost 集,并仅使用您需要的位,而不会给您的应用程序带来任何(未要求的)悲伤。
【讨论】:
以仅标头的方式实现如何意味着没有操作系统调用? 整个 Boost 智能指针实现驻留在头文件中——它的实现没有任何二进制依赖。是的,您可以将特定于操作系统的调用放在标头中,但这是个坏主意,我认为它不会通过 Boost 审核流程。 @Haper Shelby - 你能扩展一下吗?大多数模板库只是标题,并且可以编写使用 OS 系统调用的模板库。例如,想象一个文件系统模板库,它可以使用文件系统调用的宽/窄版本。为什么这是个坏主意? @Harper Shelby 当然在 smart-ptr 实现中有 操作系统特定的代码,因为特定于操作系统的自旋锁。【参考方案2】:您可以使用bcp utility 仅提取支持给定库所需的完整树的子集。不过,我不知道有任何独立的精简 Boost 实现。
【讨论】:
【参考方案3】:“boost lite”通常用于指代一种 boost 使用方式,您将自己限制为“仅标题”boost 组件。因此,这包括大量模板化的智能指针标头和 boost::bind,但不包括 regex 或 program_options 之类的东西,它们需要您与库链接才能获得大部分功能。
如果您正在构建和发布 .libs,boost-lite 样式意味着您不会引入对 boost libs 的链接依赖(下游用户的麻烦更少),如果您广泛使用pimpl idiom,您可以只需在内部使用智能 ptrs 等,lib 用户甚至不会在您的标题中看到提升类型。这可能是一种有用的变更管理技术,可用于在保守环境中引入隐身提升。
也就是说,它只是使用普通 boost 安装的一种特殊方式,而不是一些单独的包。
【讨论】:
【参考方案4】:智能指针是tr1 extensions to the standard library 的一部分。如果您的编译器供应商包含它,那可能就是要走的路。我知道 gcc 和 Visual Studio 2008 有 2 个支持它们的示例。
【讨论】:
它现在似乎包含在 Visual Studio 2008 SP1(完整版和 Express 版)中。耶!它曾经是一个单独下载的功能包。【参考方案5】:将 boost 与 boost bcp 一起使用
【讨论】:
【参考方案6】:如果我没记错的话,我认为你可以只链接你需要使用的增强部分?我认为您不能像以前那样链接太多 boost*。
【讨论】:
以上是关于提升精简版?的主要内容,如果未能解决你的问题,请参考以下文章