从Boost迁移到C ++的标准库11

时间:2014-01-07 13:53:03

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

我是boost库的新用户。由于种种原因,我发现自己更多地考虑采用助推器。据我所知,似乎boost库是一种skunkworks沙箱,其中用于即将进行标准化的各种C ++ TR功能在被C ++委员会采用之前已经尝试过 - 想想boost :: filesystem和boost :: regex,

作为一个例子,我通过#include标头在visual studio中尝试了一些C ++ 11正则表达式功能 - 这很有效,直到我移植到目标power pc平台,当时使用CodeSourcery的GCC 4.7.3。不幸的是,我意识到在运行时,大部分的正则表达式实现都是不完整或空的(甚至认为它已编译) - 通过一些功课,我应该事先意识到这一点,但是现在GCC 4.8.x已经出局了,该实现是v3标准C ++库的一部分,所以现在它是一个不同的故事。

在理想的世界中,标准库应该像开发Java一样 - 只需编写一次,随处部署 - 但这不是现实。我最终希望转向标准库实现而不是Boost的正则表达式和文件系统实现。

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

4 个答案:

答案 0 :(得分:2)

从Boost库迁移到C ++ 11 conterpart所需的工作量取决于特定Boost库的C ++ 11一致性程度。在最简单的情况下,它可以包括另一组标头和使用另一个名称空间。

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

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

答案 1 :(得分:1)

让我们从你的陈述开始

  

我想使用纯C ++ 11代码而不依赖于第三方   库。

很明显,现在这是不可能的。您将不得不使用第三方库来进行任何非平凡的计划。

不幸的是,C++ with Boost也不是一个平台。您需要第三方库来开箱即用,如Java,C#,Python等语言。

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:-3)

请参阅thisthis

一个链接指向旧的stackoverflow问题,另一个指向Stephan Lavavej执行的有趣谈话