c++ - tutorial - boost install




Welche Boost-Features überschneiden sich mit C++ 11? (2)

Austauschbar durch C ++ 11 Sprachfunktionen oder Bibliotheken

TR1 (sie sind in der documentation markiert, wenn es sich um TR1-Bibliotheken handelt)

Funktionen, die von C ++ 11 zurückportiert wurden:

  • Atomic ← std :: atomar
  • Chrono ← <chrono> (siehe unten)
  • Move ← R-Werte Referenzen

Ersetzbar durch C ++ 17 Sprachfunktionen:

  • String_ref → std :: string_view
  • Filesystem<filesystem> (Dateisystem TS)
  • Optional → std :: optional ( Bibliotheksgrundlagen TS v1 )
  • Any → std :: any (Bibliotheksgrundlagen TS v1)
  • Mathematik / <cmath><cmath> ( Spezielle Mathematik IS ), siehe unten stehende Liste
    • Beta-Funktion
    • (normal / assoziiert / sphärisch) Legendre Polynome
    • (normal / assoziiert) Legendre Polynome
    • Hermite-Polynome
    • Bessel (J / Y / I / K) -Funktionen (Y heißt Neumann-Funktion in C ++)
    • sphärische Bessel (j / y) -Funktionen
    • (unvollständige / vollständige) elliptische Integrale von (erster / zweiter / dritter Art)
    • Riemann-Zeta-Funktion
    • exponentielles Integral Ei
  • Variant → std :: Variante ( P0088R2 )

Das Standardteam arbeitet noch daran:

Ein großer Teil von MPL kann mit variablen Vorlagen getrimmt oder entfernt werden. Einige häufige Anwendungsfälle von Lexical cast können durch std :: to_string und std :: sto X ersetzt werden .

Einige Boost-Bibliotheken sind mit C ++ 11 verwandt, haben aber auch einige Erweiterungen, zB Boost.Functional/Hash enthält hash_combine und verwandte Funktionen, die nicht in C ++ 11 zu finden sind. Chrono hat I / O und Rundung und viele andere Uhren, usw., so dass Sie vielleicht noch einen Blick auf die Boosts werfen möchten, bevor Sie sie wirklich ablehnen.

Ich habe meine C ++ - Kenntnisse vor einigen Jahren ins Regal gebracht, und jetzt, wo ich sie wieder brauche, hat sich die Landschaft verändert.

Wir haben jetzt C ++ 11 und mein Verständnis ist, dass es viele Boost-Funktionen überlappt.

Gibt es eine Zusammenfassung, wo diese Überschneidungen liegen, welche Boost-Bibliotheken zu Legacy werden, welche Empfehlung von C ++ 11 Features anstelle von Boost-Einsen verwendet werden und welche nicht?


Eigentlich glaube ich nicht, dass die Boost-Bibliotheken zu Legacy werden.

Ja, Sie sollten std::type_traits , regex , shared_ptr , unique_ptr , std::type_traits tuple<> , std::tie , std::begin anstelle von Boost Typetraits / Utility, Boost Smartpointer, Boost Tuple, Boost Range-Bibliotheken verwenden können Es sollte in der Praxis nicht wirklich notwendig sein, "umzuschalten", wenn Sie nicht mehr Code nach c ++ 11 verschieben.

Nach meiner Erfahrung sind die std der meisten davon etwas weniger aussagekräftig. ZB AFAICT der Standard hat nicht

  • Perl5 reguläre Ausdrücke
  • call_traits
  • Bestimmte Regex-Schnittstellenelemente (z. B. bool boost::basic_regex<>::empty() ) und andere Schnittstellenunterschiede
    • das beißt mehr, da die Boost-Schnittstelle genau auf Boost Xpressive abgestimmt ist
    • und es spielt viel besser mit Boost String Algorithms Offensichtlich haben letztere keine Standard Gegenstücke (noch?)
  • Viele Dinge im Zusammenhang mit TMP (Boost Fusion)
  • Lazy, Expression-Template-basierte Lambdas; Sie haben unausweichliche Vorteile, weil sie heute im Gegensatz zu C ++ 11 polymorph sein können . Daher 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);
    

    Dies hat definitiv einen gewissen Reiz gegenüber C ++ 11 Lambdas (mit abschließenden Rückgabetypen, explizitem Capturing und deklarierten Parametern).

Es gibt auch eine große Rolle für Boost, gerade bei der Erleichterung der pfadweisen Migration von C ++ 03 zu C ++ 11 und der Integration von C ++ 11 und C ++ 03 Codebasen. Daran denke ich besonders

  • Boost Auto (BOOST_AUTO)
  • Boost Utility ( boost::result_of<> und verwandte)
  • Boost Foreach (BOOST_FOREACH)
  • Vergessen Sie nicht: Boost Move - das macht es möglich, Klassen mit einer Bewegungssemantik mit einer Syntax zu schreiben, die auf C ++ 03-Compilern mit Boost 1_48 + - und C ++ 11-Compilern gleichermaßen gut kompiliert werden kann.

Nur meine $ 0,02





c++11