189 votes

Fonctionnalités de boost pertinentes vs C ++11

J'ai mis mes compétences en C ++ sur les tablettes il y a plusieurs années et il semble que maintenant, lorsque j'en aurai de nouveau besoin, le paysage a changé.

Nous avons maintenant C ++ 11, et je pense que cela recouvre de nombreuses fonctionnalités de boost.

Y a-t-il un résumé où se situent ces chevauchements, ce qui stimule les bibliothèques devenant héritées, la recommandation des fonctionnalités C ++ 11 à utiliser au lieu de celles qui sont améliorées et celles qui ne le sont pas.

282voto

KennyTM Points 232647

Remplaçable par du langage C++11 caractéristiques ou des bibliothèques

TR1 (ils sont marqués dans la documentation si ceux-ci sont TR1 bibliothèques)

Les fonctionnalités de back-porté à partir de C++11:

Remplaçable par le C++14/17 fonctionnalités de la langue ou des bibliothèques (basé sur http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting)

Une grande partie de MPL peut être réduite ou supprimée à l'aide de variadic templates. Certains cas d'utilisation courants d' Lexicale en fonte peuvent être remplacés par des std::to_string et std::stoX.

Certaines bibliothèques Boost sont liées à C++11, mais aussi avoir un peu plus d'extensions, par exemple Boost.Fonctionnel/Hachage contient hash_combine et d'autres fonctions ne trouve pas dans C++11, coup de pouce.Chrono a I/O et de l'arrondi et de nombreux autres horloges, etc. de sorte que vous pouvez toujours jeter un oeil à la boost ones avant de les rejeter.

55voto

sehe Points 123151

En fait, je ne pense pas que les bibliothèques boost va devenir de l'héritage.

Oui, vous devriez être en mesure d'utiliser std::type_traits, regex, shared_ptr, unique_ptr, tuple<>, std::tie, std::begin au lieu de Stimuler Typetraits/Utilitaire, Boost Smartpointer, Boost Tuple, Stimuler la Gamme des bibliothèques, mais il devrait en pratique être pas de réel besoin de "basculer" à moins que vous vous déplacez plus de votre code c++11.

Aussi, dans mon expérience, l' std versions de la plupart de ces sont un peu moins plein de fonctionnalités. E. g. AFAICT le standard ne pas avoir

  • Perl5 expressions régulières
  • call_traits
  • Certains regex membres d'interface (comme bool boost::basic_regex<>::empty()) et othe différences d'interface
    • cette morsures de plus, depuis le coup de pouce de l'interface est exactement adapté avec Boost Xpressive
    • et il joue beaucoup plus joliment avec Boost Chaîne d'Algorithmes De toute évidence, ces derniers n'ont pas de standard homologues (encore?)
  • Beaucoup de choses relatives à la TMP (Boost de Fusion)
  • Paresseux, d'expression basé sur un modèle lambdas, ils ont inévitablement des avantages qu'ils peuvent être polymorphes aujourd'hui, contrairement à C++11. Par conséquent, ils peuvent souvent être plus succinct:

     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);
    

    Très certainement, cela a encore un certain attrait sur C++11 lambdas (avec des types de retour, explicite la capture et paramètres déclarés).

Il y a aussi un GRAND rôle pour Boost, précisément dans la facilitation de chemin-sage de la migration à partir de C++03 pour le C++11 et l'intégration de C++11 et C++03 code. Je suis particulièrement de la pensée de

  • Booster Auto (BOOST_AUTO)
  • Boost Utilitaire (boost::result_of<> et apparentés)
  • Boost Foreach (BOOST_FOREACH)
  • N'oubliez pas: Boost, qui permet d'écrire des classes avec la sémantique de déplacement, avec une syntaxe qui va compiler aussi bien sur C++03 compilateurs avec Boost 1_48+ et C++11 compilateurs.

Juste mon $0.02

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X