哪些Boost功能与C ++ 11重叠?

时间:2012-01-13 13:58:04

标签: c++ boost c++11

几年前我把我的C ++技能放在架子上,现在看来,当我再次需要它们时,景观已经发生了变化。

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

是否有一些摘要表明这些重叠是什么,哪些Boost库将成为遗产,推荐哪些C ++ 11功能使用而不是使用哪些?哪个更好?

2 个答案:

答案 0 :(得分:278)

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

TR1(如果它们是TR1库,它们会在documentation中标记)

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

  • Atomic←std :: atomic
  • Chrono←< chrono> (见下文)
  • Move←Rvalue references

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

  • String_ref→std :: string_view
  • Filesystem<filesystem>(文件系统TS)
  • Optional→std :: optional(Library Fundamentals TS v1
  • Any→std :: any(Library Fundamentals TS v1)
  • Math/Special Functions<cmath>Special Math IS),请参阅下面的列表
    • beta function
    • (正常/关联/球形)勒让德多项式
    • (正常/关联)勒让德多项式
    • Hermite多项式
    • 贝塞尔(J / Y / I / K)函数(Y在C ++中称为Neumann函数)
    • 球形贝塞尔(j / y)函数
    • (不完整/完整)椭圆积分(第一/第二/第三类)
    • 黎曼zeta函数
    • 指数积分Ei
  • Variant→std :: variant(P0088R2

标准团队仍在努力:

可以使用可变参数模板修剪或删除大部分MPLLexical cast的一些常见用例可以替换为std :: to_string和std :: sto X

一些Boost库与C ++ 11相关,但也有一些扩展,例如Boost.Functional/Hash包含hash_combine以及在C ++ 11中找不到的相关函数,Boost.Chrono具有I / O和舍入以及许多其他时钟等,因此您可能仍需要查看在真正解雇他们之前,他们已经加强了。

答案 1 :(得分:54)

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

是的,您应该能够使用std::type_traitsregexshared_ptrunique_ptrtuple<>std::tie,{{1而不是Boost Typetraits / Utility,Boost Smartpointer,Boost Tuple,Boost Range库,但实际上应该不需要'切换',除非你将更多的代码移动到c ++ 11。

另外,根据我的经验,大多数std::begin版本的功能都不太明显。例如。 AFAICT标准

  • Perl5正则表达式
  • call_traits
  • 某些正则表达式接口成员(例如std)和其他接口差异
    • 由于Boost接口与Boost Xpressive
    • 完全匹配,因此更多
    • 使用Boost字符串算法可以更好地播放 显然,后者没有标准对应物(还有?)
  • 许多与TMP(Boost Fusion)有关的事情
  • 懒惰,基于表达模板的lambdas;它们具有不可避免的好处,因为它们可以今天,而不是C ++ 11。因此,它们通常可以更简洁:

    bool boost::basic_regex<>::empty()

    最明确的是,这仍然比C ++ 11 lambdas有一些吸引力(具有尾随返回类型,显式捕获和声明的参数)。

此外,Boost还有一个很大的作用,正是在促进从C ++ 03到C ++ 11的路径迁移以及集成C ++ 11和C ++ 03代码库的过程中。我特别想到

  • 提升自动(BOOST_AUTO)
  • Boost Utility( 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); 及相关的)
  • Boost Foreach(BOOST_FOREACH)
  • 不要忘记:Boost Move - 这使得编写具有移动语义的类成为可能,其语法在使用Boost 1_48 +和C ++ 11编译器的C ++ 03编译器上同样可以很好地编译。

只需我0.02美元