J'ai mis mes compétences en C++ sur le plateau il y a plusieurs années et il semble maintenant que, lorsque j'en ai encore besoin, le paysage a changé.
Nous avons maintenant le C++ 11 et je crois comprendre qu'il recouvre de nombreuses fonctionnalités de Boost.
Existe-t-il un résumé des zones de chevauchement, des bibliothèques Boost qui vont devenir héritées, des recommandations sur les fonctionnalités C++ 11 à utiliser au lieu de celles de Boost et lesquelles de mieux pas?
Remplaçable par des fonctionnalités ou des bibliothèques du langage C++ 11
<cmath>
, voir la liste ci-dessous log1p
, expm1
cbrt
, hypot
acosh
, asinh
, atanh
TR1 (ils sont marqués dans le documentation s'il s'agit de bibliothèques TR1)
Fonctions back-ported from C++ 11:
Remplaçable par les fonctionnalités du langage C++ 17:
<cmath>
( Special Math IS ), voir la liste ci-dessous L’é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 courants de distribution lexicale peuvent être remplacés par std :: to_string et std :: stoX.
Certaines bibliothèques Boost sont liées à C++ 11 mais ont également d'autres extensions, par exemple. Boost.Functional/Hash contient hash_combine et fonctions connexes non trouvées dans C++ 11, Boost.Chrono a I/O et arrondi et beaucoup d’autres horloges, etc., alors vous voudrez peut-être jeter un coup d’œil sur les boosters avant de les ignorer.
En fait, je ne pense pas que les bibliothèques boost vont devenir un héritage.
Oui, vous devriez pouvoir utiliser std::type_traits
, regex
, shared_ptr
, unique_ptr
, Tuple<>
, std::tie
, std::begin
Au lieu de bibliothèques Boost Typetraits/Utility, Boost Smartpointer, Boost Tuple, Boost Range, mais dans la pratique, il ne devrait pas être réellement nécessaire de "changer" de code, sauf si vous déplacez davantage de votre code vers c ++ 11.
De plus, d'après mon expérience, les versions de std
de la plupart d'entre elles ont un peu moins de fonctionnalités. Par exemple. AFAICT le standard ne pas a
bool boost::basic_regex<>::empty()
) et d'autres différences d'interface Lambdas paresseux à base de modèles d'expression; ils ont des avantages inévitables en ce qu'ils peuvent être polymorphes aujourd'hui, par opposition à C++ 11. Par conséquent, ils peuvent souvent être plus succincts:
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 les lambdas C++ 11 (avec les types de retour de fin, la capture explicite et les paramètres déclarés).
De plus, Boost a un rôle important à jouer, qui consiste précisément à faciliter la migration de C++ 03 vers C++ 11 et à intégrer des bases de code C++ 11 et C++ 03. Je pense particulièrement à
boost::result_of<>
Et connexes)Juste mon 0,02 $