【问题标题】:Migrating from Boost to the Standard Library for C++11从 Boost 迁移到 C++11 标准库
【发布时间】:2014-01-25 05:44:31
【问题描述】:

我是 boost 库的新用户。出于多种原因,我发现自己更多地考虑采用 boost。据我所知,boost 库似乎是一种臭鼬沙箱,在被 C++ 委员会采用之前,在其中尝试了各种 C++ TR 即将标准化的特性——想想 boost::filesystem 和 boost::regex,

例如,我在 Visual Studio 中通过 #include 标头尝试了一些 C++11 正则表达式功能 - 在我移植到目标 power pc 平台之前效果很好,当时使用的是 CodeSourcery 的 GCC 4.7.3.不幸的是,我意识到在运行时,大部分正则表达式实现是不完整或空的(甚至认为它已编译) - 通过一些家庭作业,我应该事先意识到这一点,但是现在 GCC 4.8.x 已经发布,该实现是 v3 标准 C++ 库的一部分,因此现在情况不同了。

在理想情况下,标准库应该类似于为 Java 开发 - 一次编写,随处部署 - 但这不是现实。我最终想转向标准库实现,而不是 Boost 的正则表达式和文件系统实现。

鉴于上述正则表达式的历史,我的问题是开发人员应该如何使用 boost,当标准库采用这些功能时,是否可以对 boost 标头和命名空间进行简单的搜索和替换,或者有更多的事情要做考虑。我想使用不依赖第三方库的纯 C++11 代码。

【问题讨论】:

    标签: c++ regex c++11 gcc boost


    【解决方案1】:

    从 Boost 库迁移到其 C++11 对应部分所需的工作量取决于特定 Boost 库的 C++11 一致性程度。在最简单的情况下,可以包含另一组标头并使用另一个命名空间。

    在更复杂的情况下,Boost 库可能与 C++11 有一些微妙的不兼容(例如,在 Boost.Thread V1 ~thread 曾经调用 detach()) - 这样的事情可能会“悄悄地”破坏代码的正确性,但它们很容易修复。

    最后,Boost 库可以实现 C++11 中不存在的功能(例如,boost::bindcan be extended 使用 get_pointer 函数)。显然,将这​​样的代码移植到 C++11 并非易事。

    【讨论】:

      【解决方案2】:

      让我们从你的陈述开始

      我想使用不依赖第三方的纯 C++11 代码 图书馆。

      很明显,现在这是不可能的。对于任何重要的程序,您都必须使用 3rd 方库。

      很遗憾,C++ with Boost 也不是一个平台。您需要 3rd 方库来执行 Java、C#、Python 等语言的开箱即用功能。

      因此,您必须根据自己的要求选择库:性能、支持的平台、多线程等。

      同样,Boost 不应该是您的默认选择。现在它不像 10 年前那么有用了。大多数必须的东西已经进入了 C++ 标准库。

      如果您支持现有的 C++ 代码库,请找到最适合您需求的 C++ 库(例如,re2 用于正则表达式)。如果你开始一个新项目,我建议使用Qt 作为平台。

      【讨论】:

        【解决方案3】:

        迁移使用的“简单”方法可能是使用预处理器定义来定义“使用 Boost”指令。通过将所有 boost 代码放在 #if-#else 中并仔细编写代码以不破坏(或至少具有预期结果)对于没有 C++11 等效项的部分。您不能在代码开头之前简单地提供“使用 Boost”的定义,而是使用 C++11 功能。

        【讨论】:

          【解决方案4】:

          thisthis

          一个链接指向一个旧的 stackoverflow 问题,另一个指向 Stephan Lavavej 进行的有趣演讲

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-18
            • 2017-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多