J'ai mis mes compétences C ++ sur l'étagère il y a plusieurs années et il semble que maintenant, quand j'en ai à nouveau besoin, le paysage a changé.
Nous avons maintenant C ++ 11, et je crois comprendre qu'il chevauche de nombreuses fonctionnalités Boost.
Existe-t-il un résumé de ces chevauchements, des bibliothèques Boost qui vont devenir héritées, des recommandations sur les fonctionnalités C ++ 11 à utiliser au lieu de celles boostées et lesquelles ne sont pas meilleures?
Réponses:
Remplaçable par les fonctionnalités ou bibliothèques du langage C ++ 11
<cmath>
, voir la liste ci-dessouslog1p
,expm1
cbrt
,hypot
acosh
,asinh
,atanh
TR1 (ils sont marqués dans la documentation s'il s'agit de bibliothèques TR1)
Fonctionnalités back-portées à partir de C ++ 11:
Remplaçable par les fonctionnalités du langage C ++ 17:
<cmath>
( Special Math IS ), voir la liste ci-dessousL'équipe standard y travaille toujours:
Une grande partie de MPL peut être réduite ou supprimée à l'aide de modèles variadiques. Certains cas d'utilisation commune de fonte lexicales peuvent être remplacés par std :: to_string et std :: sto X .
Certaines bibliothèques Boost sont liées à C ++ 11 mais ont également d'autres extensions, par exemple Boost.Functional / Hash contient hash_combine et des fonctions associées non trouvées dans C ++ 11, Boost.Chrono a des E / S et des arrondis et de nombreuses autres horloges, etc., vous voudrez peut-être toujours jeter un coup d'œil aux boosters avant de vraiment les rejeter.
la source
std::unique_ptr
partie de TR1 (car elle nécessite une sémantique de déplacement)En fait, je ne pense pas que les bibliothèques boost deviendront héritées.
Oui, vous devriez être en mesure d'utiliser
std::type_traits
,regex
,shared_ptr
,unique_ptr
,tuple<>
,std::tie
,std::begin
au lieu de Typetraits Boost / Utility, Boost pointeur intelligent, Boost Tuple, Bibliothèques Boost Range, mais il devrait en pratique pas vraiment besoin de « switch » à moins que vous déplacez plus votre code en c ++ 11.De plus, d'après mon expérience, les
std
versions de la plupart d'entre elles sont un peu moins fonctionnelles. Par exemple , la norme AFAICT ne pas avoirbool boost::basic_regex<>::empty()
) et d'autres différences d'interfaceLambdas paresseux basés sur un modèle d'expression; ils ont des avantages inévitables dans la mesure où ils peuvent être polymorphes aujourd'hui , contrairement au C ++ 11. Par conséquent, ils peuvent souvent être plus succincts:
Très certainement, cela a encore un certain attrait sur les lambdas C ++ 11 (avec les types de retour de fin, la capture explicite et les paramètres déclarés).
De plus, il y a un GRAND rôle pour Boost, précisément en facilitant la migration par chemin de C ++ 03 vers C ++ 11 et en intégrant les bases de code C ++ 11 et C ++ 03. Je pense particulièrement à
boost::result_of<>
et associé)Juste mon 0,02 $
la source