【问题标题】:Which Boost features overlap with C++11?哪些 Boost 功能与 C++11 重叠?
【发布时间】:2012-02-09 17:18:45
【问题描述】:

几年前我把我的 C++ 技能搁置了,现在看来,当我再次需要它们时,情况发生了变化。

我们现在有了 C++11,我的理解是它与许多 Boost 功能重叠。

是否有一些总结这些重叠的地方,哪些 Boost 库将成为遗留库,推荐使用哪些 C++11 特性而不是 boost 特性,哪些最好不要?

【问题讨论】:

  • Boost 是最早实现 TR1 库的公司之一。由于这现在是标准,您应该更喜欢标准版本。 Boost.Lambda 现在也被实际的 lambdas 取代了。
  • 关于 C++11 的 Wikipedia 文章很好地总结了大多数变化。

标签: c++ boost c++11


【解决方案1】:

可被 C++11 语言功能或库替换

TR1(如果是 TR1 库,则在 documentation 中标记)

从 C++11 向后移植的功能:

可被 C++17 语言特性替代:

标准团队仍在努力:

MPL 的很大一部分可以使用可变参数模板修剪或删除。 Lexical cast 的一些常见用例可以替换为 std::to_string 和 std::stoX

一些 Boost 库与 C++11 相关,但也有一些扩展,例如Boost.Functional/Hash 包含 hash_combine 和 C++11 中没有的相关函数,Boost.Chrono 具有 I/O 和舍入以及许多其他时钟等,所以你可能仍然想在真正解雇之前先看看 boost 的他们。

【讨论】:

  • 添加到列表 Boost.ChronoBoost.ExceptionBoost.Swap
  • 请注意,Boost.Lambda(或者更确切地说是 Boost.Phoenix 的 lambdas)对于多态 lambdas 仍然有用。
  • 不错的列表,虽然我不相信 std::unique_ptr 是 TR1 的一部分(因为它需要移动语义)
  • @ildjarn:Boost.Chrono 提供了比 更多的功能。 Boost.Exception - 只有 N2179 是相关的。
  • @Nemo:是的。只有 std::tr1::shared_ptr 是 TR1 的一部分,const std::unique_ptr 替换了 boost::scoped_ptr 和 boost::scoped_array 的用例
【解决方案2】:

实际上,我认为 boost 库不会成为传统库。

是的,你应该可以使用std::type_traitsregexshared_ptrunique_ptrtuple<>std::tiestd::begin 而不是 Boost Typetraits/Utility、Boost Smartpointer、Boost Tuple , Boost Range 库,但实际上应该没有真正需要“切换”,除非您将更多代码移动到 c++11。

另外,根据我的经验,其中大多数的std 版本的功能都比较少。例如。 AFAICT 标准不没有

  • Perl5 正则表达式
  • call_traits
  • 某些正则表达式接口成员(例如bool boost::basic_regex<>::empty())和其他接口差异
    • 因为 Boost 接口与 Boost Xpressive 完全匹配,所以这一点更重要
    • 它与 Boost 字符串算法配合得更好 显然,后者没有标准对应物(还没有?)
  • 与 TMP(Boost Fusion)相关的许多事情
  • 基于惰性表达式模板的 lambda;与 C++11 相比,它们具有不可避免的好处,因为它们现在可以是多态的。因此,它们通常可以更简洁:

     std::vector<int> v = {1,2,-9,3};
    
     for (auto i : v | filtered(_arg1 >=0))
         std::cout << i << "\n";
    
     // or:
     boost::for_each(v, std::cout << _arg1);
    

    毫无疑问,这仍然比 C++11 lambda 更具吸引力(带有尾随返回类型、显式捕获和声明的参数)。

此外,Boost 还发挥着重要作用,正是在促进从 C++03 到 C++11 的路径迁移以及集成 C++11 和 C++03 代码库方面。我特别想

  • 自动加速 (BOOST_AUTO)
  • Boost 实用程序(boost::result_of&lt;&gt; 及相关)
  • 提升 Foreach (BOOST_FOREACH)
  • 不要忘记:Boost Move - 这使得编写具有移动语义的类成为可能,其语法在具有 Boost 1_48+ 和 C++11 编译器的 C++03 编译器上也能同样良好地编译。

只要我的 0.02 美元

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2014-05-27
    • 2011-09-17
    • 2013-04-14
    相关资源
    最近更新 更多