Ich habe meine C++ - Kenntnisse vor einigen Jahren ins Regal gestellt und es scheint, dass sich die Landschaft geändert hat, wenn ich sie wieder brauche.
Wir haben jetzt C++ 11 und ich verstehe, dass es viele Boost-Funktionen überlappt.
Gibt es eine Zusammenfassung, wo diese Überlappungen liegen, welche Boost-Bibliotheken zu Legacy werden, welche C++ 11-Funktionen anstelle von Boost-Funktionen empfohlen werden und welche besser nicht?
Durch C++ 11-Sprachfunktionen oder -Bibliotheken ersetzbar
<cmath>
siehe Liste unten log1p
, expm1
cbrt
, hypot
acosh
, asinh
, atanh
TR1 (sie sind in der Dokumentation markiert, wenn es sich um TR1-Bibliotheken handelt)
Von C++ 11 rückportierte Funktionen:
Durch C++ 17-Sprachfunktionen ersetzbar:
<cmath>
( Special Math IS ), siehe Liste unten Das Standardteam arbeitet noch daran:
Ein großer Teil von MPL kann mithilfe verschiedener Vorlagen verkleinert oder entfernt werden. Einige gebräuchliche Anwendungsfälle von Lexikonform können durch std :: to_string und std :: sto ersetzt werdenX.
Einige Boost-Bibliotheken sind mit C++ 11 verwandt, haben jedoch auch einige weitere Erweiterungen, z. Boost.Functional/Hash enthält hash_combine und verwandte Funktionen, die in C++ 11 nicht enthalten sind. Boost.Chrono hat I/O und Rounding und viele andere Uhren usw., also möchten Sie vielleicht noch einen Blick auf die Boost-Uhren werfen, bevor Sie sie wirklich verwerfen.
Eigentlich glaube ich nicht, dass die Boost-Bibliotheken zum Vermächtnis werden.
Ja, Sie sollten in der Lage sein, std::type_traits
, regex
, shared_ptr
, unique_ptr
, Tuple<>
, std::tie
, std::begin
Anstelle von Boost Typetraits/Utility, Boost Smartpointer, Boost Tuple und Boost Range Libraries, aber in der Praxis sollte es nicht notwendig sein, zu wechseln, es sei denn, Sie verschieben mehr Code auf c ++ 11.
Meiner Erfahrung nach sind die std
-Versionen der meisten davon auch etwas weniger eigenwillig. Z.B. AFAICT hat der Standard nicht
bool boost::basic_regex<>::empty()
) und andere Schnittstellenunterschiede Faule, auf Ausdrucksvorlagen basierende Lambdas; Sie haben unvermeidliche Vorteile, da sie können polymorph sein heute im Gegensatz zu C++ 11. Deshalb können sie oft prägnanter sein:
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);
Auf jeden Fall hat dies gegenüber C++ 11-Lambdas (mit nachgestellten Rückgabetypen, expliziter Erfassung und deklarierten Parametern) immer noch einen gewissen Reiz.
Außerdem spielt Boost eine wichtige Rolle, da es die pfadweise Migration von C++ 03 nach C++ 11 und die Integration von C++ 11- und C++ 03-Codebasen erleichtert. Ich denke besonders an
boost::result_of<>
Und verwandte)Nur meine 0,02 $