Dove iniziare a imparare a usare le librerie Boost?


16

Boost è recentemente diventato disponibile sul progetto su cui sto lavorando e non ho molta esperienza con esso. La libreria ha così tante parti e caratteristiche che è difficile sapere da dove cominciare ad apprenderla, soprattutto perché cercherò di impararla mentre creo il codice di produzione (quindi non può rallentarmi troppo).

Gradirei molto se qualcuno potesse elencare da 3 a 5 funzioni che sono molto utili in generale, la programmazione quotidiana e indicare perché sono utili. Quindi posso iniziare a imparare quelli e usarli - almeno mi darà un punto d'appoggio in biblioteca e un posto amichevole per iniziare ad impararlo / applicarlo :)

Grazie in anticipo!


Non capisco la frase "punto d'appoggio in biblioteca" in questo contesto. Cosa c'è che non va nei libri? Ci sono alcuni in materia da parte dei soliti venditori, averli nella libreria del tuo team dovrebbe essere un must.
aquaherd

Ho letto tutto il tempo per la programmazione - non ho il tempo di leggere un libro o una guida di riferimento su boost back to front per sapere tutto quello che ha e se è utile in questo momento. Mi piacerebbe iniziare ad usarlo qua e là e raccoglierlo lentamente mentre lavoravo, e volevo alcuni esempi fondamentali di componenti boost davvero utili. Ad esempio, C ++ efficace di Scott Meyers parla di shared_ptr non stop (e molto poco altro) perché è così buono. Cos'altro è insolitamente utile in boost?
John Humphreys - w00te

Personalmente mi sono piaciute molto le macro BOOST_FOREACH, i modelli osservatore / abbonato, le espressioni regolari, i parser di data / ora (sfaccettature), ma le ho incontrate per caso durante la modifica della spinta esistente usando il codice o come DeadMG delineato. Ho solo grattato la punta dell'iceberg che è boost, ma mi è sembrata una naturale continuazione dell'STL.
aquaherd

Risposte:


8

Se stai usando un compilatore pre TR1, allora i puntatori intelligenti

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

boost::scoped_array
boost::shared_array

Se il tuo compilatore ha già dei puntatori intelligenti, usali.
Il motivo è evidente C ++ senza puntatori intelligenti non è fondamentalmente C ++

Le librerie boost ptr_contaier.

Tutti i contenitori STL sono stati implementati in modo specifico per contenere i puntatori. I contenitori non solo assumono la proprietà dei puntatori in modo che quando il contenitore viene distrutto distrugga automaticamente tutti i puntatori. MA fornisce anche accessi agli elementi come normali riferimenti a oggetti (non puntatori), per cui è facile usare gli oggetti in algoritmi standard senza i wrapper.

Le librerie boost lambda. (vedi commento sotto)

I funzioni STL e i leganti sono OK per cose semplici. Ma boost :: lambda ha fatto il passo successivo e rende le cose molto più semplici quando si usano gli algoritmi standard.

boost :: any e boost :: variant

Quando devi tenere gli oggetti senza voler sapere il loro tipo esatto.

Contenitori multi indice

Contenitori che consentono diversi modi per accedere agli elementi.
Sono finiti i giorni in cui hai un vettore di oggetti e una mappa separata per la ricerca rapida di vettore. Ciò riduce la piastra della caldaia che è necessario scrivere per mantenere i due contenitori quando si inseriscono / eliminano elementi nei contenitori.

boost :: lexical_cast

Probabilmente il meno utile nella vita reale ma molto divertente con cui giocare è boost :: lexical_cast. Converte qualsiasi oggetto in / da una stringa (purché quel tipo abbia gli operatori << e >> appropriati definiti). Molto utile per scaricare messaggi di errore durante il de-bugging.


1
Boost.Phoenix ha ufficialmente sostituito Boost.Lambda, che ora è considerato deprecato. Consiglia il primo anziché il secondo per il nuovo codice. : -]
ildjarn il

16

Boost non è un framework, né una libreria. Si tratta di una raccolta di biblioteche di qualità controllata e sottoposta a revisione paritaria. Non impari Boost. Le librerie sono individuali: quando hai bisogno di qualcosa, controlli per vedere se è in Boost, se lo è, quindi impari quella libreria. Questo è tutto. Non puoi avere una comprensione di boost :: opzionale dalla comprensione di boost :: variant.


4
Si potrebbe dire che boost è un'etichetta di qualità e un set di distribuzione.
Klaim

1

Boost è una raccolta di librerie. La prossima volta che esegui un codice kata, scegli una libreria in Boost che ritieni possa aiutarti e usala. La documentazione è molto buona e non dovresti avere problemi a raccogliere semplici usi. Quelli più complessi arriveranno quando proverai a fare cose più intelligenti.

Esempio: un thread singolo sicuro con boost :: thread call_once.

Esempio: leggere un file di configurazione di chiave: valore usando tokenizer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.