Umieściłem swoje umiejętności C ++ na półce kilka lat temu i wydaje się, że kiedy znów ich potrzebuję, krajobraz się zmienił.
Mamy teraz C ++ 11 i rozumiem, że nakłada się on na wiele funkcji Boost.
Czy jest jakieś podsumowanie, gdzie leżą te nakładki, które biblioteki Boost staną się starsze, zalecenie, których funkcji C ++ 11 użyć zamiast tych ulepszeń, a które lepiej nie?
Odpowiedzi:
Zastępowane przez funkcje języka C ++ 11 lub biblioteki
<cmath>
patrz lista poniżejlog1p
,expm1
cbrt
,hypot
acosh
,asinh
,atanh
TR1 (są zaznaczone w dokumentacji, jeśli są to biblioteki TR1)
Funkcje przeniesione z C ++ 11:
Zastępowane przez funkcje języka C ++ 17:
<cmath>
( Special Math IS ), patrz lista poniżejStandardowy zespół wciąż nad tym pracuje:
Duża część MPL może zostać przycięta lub usunięta przy użyciu różnych szablonów. Niektóre przypadki wspólnego wykorzystywania Lexical obsady może być zastąpione przez std :: to_string i std :: STO X .
Niektóre biblioteki Boost są powiązane z C ++ 11, ale mają również więcej rozszerzeń, np. Boost.Funkcjonalne / Hash zawiera hash_combine i powiązane funkcje nie znalezione w C ++ 11, Boost.Chrono ma I / O i zaokrąglanie i wiele innych zegarów, itp., więc możesz jeszcze rzucić okiem na te wzmacniające, zanim naprawdę je odrzucisz.
źródło
std::unique_ptr
jest częścią TR1 (ponieważ wymaga semantyki przenoszenia)Właściwie nie sądzę, aby biblioteki rozszerzeń stały się dziedzictwem.
Tak, powinieneś być w stanie wykorzystać
std::type_traits
,regex
,shared_ptr
,unique_ptr
,tuple<>
,std::tie
,std::begin
zamiast Typetraits Boost / Utility, Zwiększ sprytny wskaźnik, Zwiększ krotka, Zwiększ bibliotek klasy, ale nie powinno być w praktyce nie rzeczywista potrzeba „switch”, chyba że jesteś w ruchu więcej twój kod do c ++ 11.Z mojego doświadczenia
std
wynika , że wersje większości z nich są nieco mniej funkcjonalne. Np. AFAICT standard nie mabool boost::basic_regex<>::empty()
) i inne różnice interfejsuLeniwe lambdas oparte na szablonach wyrażeń; mają nieuniknione zalety, ponieważ mogą być dzisiaj polimorficzne , w przeciwieństwie do C ++ 11. Dlatego często mogą być bardziej zwięzłe:
Zdecydowanie ma to jeszcze apelację w stosunku do lambd C ++ 11 (z końcowymi typami zwrotów, jawnym przechwytywaniem i deklarowanymi parametrami).
Ponadto funkcja Boost ma WIELKĄ rolę, właśnie w ułatwianiu migracji ścieżek z C ++ 03 do C ++ 11 oraz integrowaniu baz kodów C ++ 11 i C ++ 03. Szczególnie o tym myślę
boost::result_of<>
i powiązane)Tylko moje 0,02 $
źródło