哪些Boost特性与C++11重叠?

几年前,我把我的C++技能束之高阁,现在看来,当我再次需要它们时,情况已经发生了变化。

我们现在已经有了C++11,我的理解是它与许多Boost特性重叠。

有没有一些总结,这些重叠在哪里,哪些Boost库将成为遗产,建议使用哪些C++11特性来代替Boost特性,哪些最好不要使用?

39139 次浏览

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

TR1(如果它们是TR1库,则在文档中对它们进行标记)

从C++11向后移植的特性:

可由C++17语言替换功能:

标准团队仍在努力:

使用可变模板,可以减少或删除MPL的大部分内容。词法转换的一些常见用例可以替换为STD:to_字符串和STD:stoX

一些Boost库与C++11相关,但也有一些更多的扩展,例如boost.functional/hash包含散列_组合和C++11中没有的相关函数,加速计时具有I/O和舍入以及许多其他时钟等。所以你可能还是想在真正解雇他们之前看一看他们。

实际上,我不认为Boost库会成为遗产。

是的,您应该能够使用std::type_traitsregexshared_ptrunique_ptrtuple<>std::tiestd::begin,而不是Boost TypeTraits/Utility、Boost SmartPointer、Boost Tuple、Boost Range Libraries.但在实践中,除非您将更多的代码迁移到C++11,否则应该没有真正需要“切换”。

此外,根据我的经验,std版本中的大多数功能都比较少。例如,AFAICT标准是否

  • Perl5正则表达式
  • 调用_特性
  • 某些正则表达式接口成员(如bool boost::basic_regex<>::empty())和其他接口差异
    • 由于Boost接口与Boost Expressive完全匹配,因此这一点更重要。
    • 它与Boost字符串算法配合得更好。 显然,后者没有标准的对应物(还没有?)
  • 与TMP(增强融合)有关的许多事情
  • 懒惰的,基于表达式模板的lambdas;它们具有不可避免的好处,因为它们是多态的今天,与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 lambdas(具有尾随返回类型、显式捕获和声明参数)更有吸引力。

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

  • 增压自动(增压_自动)
  • BOOST实用程序(boost::result_of<>及相关)
  • BOOST Foreach(增强_Foreach)
  • 不要忘记:BoostMove——它使得编写具有Move语义的类成为可能,其语法在使用Boost1_48+和C++11编译器的C++03编译器上编译得同样好。

只有我的0.02美元