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


Answers

其实,我不认为助推库会成为遗产。

是的,你应该可以使用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 String算法的搭配很好。显然,后者没有标准的对应物(还有?)
  • 许多与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具有BIG角色,正是在促进从C ++ 03到C ++ 11的路径式迁移以及集成C ++ 11和C ++ 03代码库方面。 我特别想到

  • Boost Auto(BOOST_AUTO)
  • Boost Utility( boost::result_of<>和相关)
  • 提升Foreach(BOOST_FOREACH)
  • 不要忘记:Boost Move - 使用移动语义编写类,其语法可以在C ++ 03编译器上使用Boost 1_48 +和C ++ 11编译器编译。

只是我的0.02美元

Question

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

我们已经获得了C ++ 11,我的理解是它重叠了许多Boost特性。

是否有一些重叠部分存在的概要,哪些Boost库将成为遗留问题,哪些C ++ 11功能可以使用而不是增强功能,哪些更好?




Related