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

use*_*178 188 c++ boost c++11

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

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

是否存在这些重叠的摘要,哪些Boost库将成为遗产,推荐哪些C++ 11功能使用而不是增强哪些,哪些更好?

ken*_*ytm 279

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

TR1(如果这些是TR1库,它们会在文档中标记)

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

可由C++ 17语言特性替换:

标准团队仍在努力:

MPL的很大一部分可以使用可变参数模板进行修剪或删除.Lexical强制转换的一些常见用例可以用std :: to_string和std :: sto X替换.

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

  • 请注意,Boost.Lambda(或者更确切地说,Boost.Phoenix的lambdas)对于多态lambda仍然有用. (9认同)
  • 不错的列表,虽然我不相信`std :: unique_ptr`是TR1的一部分(因为它需要移动语义) (2认同)
  • @Nemo:是的.只有std :: tr1 :: shared_ptr是TR1的一部分,const std :: unique_ptr替换了boost :: scoped_ptr和boost :: scoped_array的用例 (2认同)

seh*_*ehe 55

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

是的,你应该能够使用std::type_traits,regex,shared_ptr,unique_ptr,tuple<>,std::tie,std::begin而不是加速Typetraits /公用事业,助推智能指针,升压元组,升压范围库,但应该在实践中并不真的需要"开关",除非你正将越来越多的你的代码到c ++ 11.

另外,根据我的经验,std大多数这些版本的功能都不那么特别.例如AFAICT标准并不能

  • Perl5正则表达式
  • call_traits
  • 某些正则表达式接口成员(例如bool boost::basic_regex<>::empty())和其他接口差异
    • 由于Boost接口与Boost Xpressive完全匹配,因此更多
    • 使用Boost字符串算法可以更好地发挥作用显然,后者没有标准对应物(但是?)
  • 许多与TMP相关的事情(Boost Fusion)
  • 懒惰的,基于表达模板的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);
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

只需我0.02美元