我是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代码而不依赖于第三方库。
答案 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)