Od czego zacząć naukę korzystania z bibliotek Boost?

16

Boost został niedawno udostępniony w projekcie, nad którym pracuję, i nie mam z nim dużego doświadczenia. Biblioteka ma tak wiele części i funkcji, że trudno jest wiedzieć, od czego zacząć ją uczyć - zwłaszcza, że ​​będę się jej uczył podczas tworzenia kodu produkcyjnego (więc nie może mnie to zbytnio spowolnić).

Byłbym bardzo wdzięczny, gdyby ktoś mógł wymienić około 3 do 5 funkcji, które są ogólnie bardzo przydatne, codzienne programowanie i wskazać, dlaczego są one przydatne. Potem mogę zacząć się uczyć i korzystać z nich - przynajmniej zapewni mi to przyczółek w bibliotece i przyjazne miejsce do rozpoczęcia nauki / stosowania :)

Z góry dziękuję!

John Humphreys - w00te
źródło
W tym kontekście nie rozumiem wyrażenia „przyczółek w bibliotece”. Co jest nie tak z książkami? Jest kilku na ten temat od zwykłych dostawców, więc umieszczenie ich na półce w zespole powinno być koniecznością.
aquaherd
Cały czas czytam programowanie - nie mam czasu, aby przeczytać książkę lub przewodnik po boostie od początku do końca, aby dowiedzieć się wszystkiego, co ma i czy jest to przydatne w tej chwili. Chciałbym zacząć używać go tu i tam i powoli podnosić go podczas pracy, i chciałem kilka podstawowych przykładów naprawdę użytecznych komponentów wspomagających. Na przykład Effective C ++ autorstwa Scotta Meyersa mówi o shared_ptr non stop (i bardzo niewiele innych), ponieważ jest tak dobry. Co jeszcze jest niezwykle pomocne w doładowaniu?
John Humphreys - w00te
Osobiście bardzo podobały mi się makra BOOST_FOREACH, wzorce obserwatora / subskrybenta, wyrażenia regularne, parsery daty / godziny (aspekty), ale albo natknąłem się na nie przypadkowo podczas modyfikowania istniejącego wzmocnienia za pomocą kodu lub zgodnie z nakreśleniem DeadMG. Narysowałem tylko wierzchołek góry lodowej, która jest wzmocniona, ale czułem się jak naturalna kontynuacja STL.
aquaherd

Odpowiedzi:

8

Jeśli używasz kompilatora wcześniejszego niż TR1, wówczas inteligentne wskaźniki

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

Jeśli twój kompilator ma już inteligentne wskaźniki, użyj ich.
Powodem jest oczywiste, że C ++ bez inteligentnych wskaźników w zasadzie nie jest C ++

Biblioteki boost ptr_contaier.

Wszystkie kontenery STL zostały zaimplementowane specjalnie do przechowywania wskaźników. Pojemniki nie tylko przejmują na własność wskaźniki, więc gdy pojemnik zostanie zniszczony, automatycznie niszczy wszystkie wskaźniki. ALE zapewnia również dostęp do elementów jako normalne odwołania do obiektów (nie wskaźników), dzięki czemu można łatwo używać obiektów w standardowych algorytmach bez funktorów opakowujących.

Biblioteki doładowania lambda. (patrz komentarz poniżej)

Funktory i spoiwa STL są odpowiednie dla prostych rzeczy. Ale boost :: lambda podjęło ten krok i znacznie upraszcza korzystanie ze standardowych algorytmów.

boost :: any i boost :: variant

Kiedy musisz trzymać przedmioty, nie chcąc znać ich dokładnego typu.

Pojemniki wieloindeksowe

Kontenery, które umożliwiają wiele różnych sposobów dostępu do elementów.
Dawno minęły czasy, kiedy masz wektor obiektów i oddzielną mapę do szybkiego wyszukiwania wektora. Zmniejsza to płytę grzewczą, którą musisz napisać, aby zachować dwa pojemniki podczas wkładania / usuwania elementów do pojemników.

boost :: lexical_cast

Prawdopodobnie najmniej przydatna w prawdziwym życiu, ale świetną zabawą jest doładowanie :: lexical_cast. Konwertuje dowolny obiekt na ciąg znaków (o ile w tym typie zdefiniowano odpowiednie operatory << i >>). Bardzo przydatne do odrzucania komunikatów o błędach podczas usuwania błędów.

Martin York
źródło
1
Boost.Phoenix oficjalnie zastąpił Boost.Lambda, który jest obecnie uważany za przestarzały. Proszę polecić to pierwsze, a nie drugie, aby uzyskać nowy kod. : -]
ildjarn
16

Boost nie jest ramą ani biblioteką. Jest to kontrolowana pod względem jakości, recenzowana kolekcja bibliotek. Nie uczysz się wzmocnienia. Biblioteki są indywidualne - kiedy czegoś potrzebujesz, sprawdzasz, czy jest w trybie Boost, a jeśli tak, to uczysz się tej biblioteki. Otóż ​​to. Nie można uzyskać pojęcia o podwyższeniu :: opcjonalnie od uzyskania pojęcia o podwyższeniu :: wariancie.

DeadMG
źródło
4
Można powiedzieć, że boost to znak jakości i zestaw dystrybucyjny.
Klaim
1

Boost to kolekcje bibliotek. Następnym razem, gdy zrobisz kata kodu, wybierz bibliotekę w Boost, która Twoim zdaniem może ci pomóc i użyj jej. Dokumentacja jest bardzo dobra i nie powinieneś mieć problemów z wybieraniem prostych zastosowań. Bardziej złożone pojawią się, gdy spróbujesz robić bardziej sprytne rzeczy.

Przykład: bezpieczny wątek singleton z boost :: thread call_once.

Przykład: przeczytaj plik konfiguracyjny klucz: wartość za pomocą tokenizera.

Sardathrion - Przywróć Monikę
źródło