Domanda

Da quando ho iniziato a utilizzare questo sito, continuo a sentir parlare della libreria Boost. Mi chiedo quali sono alcuni dei principali vantaggi della libreria Boost (quindi perché dovrei usarla) e quanto è portatile la libreria Boost?

È stato utile?

Soluzione

Boost è organizzato da diversi membri del comitato standard.
Quindi è un terreno fertile per le biblioteche che saranno nel prossimo standard.

  1. È un'estensione di STL (riempie i bit lasciati fuori)
  2. È ben documentato.
  3. È ben rivisto tra pari.
  4. Ha un'alta attività, quindi i bug vengono rilevati e corretti rapidamente.
  5. È neutrale rispetto alla piattaforma e funziona ovunque.
  6. È gratis da usare.

Con tr1 in arrivo, è bello sapere che il boost ha già molto terreno coperto. Molte delle librerie in tr1 sono sostanzialmente adattate direttamente dagli originali boost e quindi sono state provate e testate. La differenza è che sono stati spostati nello spazio dei nomi std :: tr1 (anziché boost).

Tutto quello che devi fare è aggiungere quanto segue al tuo compilatore predefinito include il percorso di ricerca :

<boost-install-path>/boost/tr1/tr1

Quindi, quando includi il potenziamento delle intestazioni standard, verranno automaticamente importati tutti gli elementi necessari nello spazio dei nomi std :: tr1

Ad esempio:

Per usare std :: tr1 :: share_ptr devi solo includere < memory > ;. Questo ti darà tutti i puntatori intelligenti con un solo file.

Altri suggerimenti

Puoi semplicemente leggere la Potenzia le informazioni di base per avere una rapida panoramica del perché dovresti usare Potenzia e per cosa puoi usarlo. Vale la pena pochi minuti.

99% portatile.

Direi che ha parecchie librerie che sono davvero utili una volta scoperto un bisogno risolto da boost. O lo codifichi tu stesso o usi una libreria molto solida. Avere a disposizione la fonte di shelve per cose come Multi-Index, Lambda, Program Options, RegEx, SmartPtr e Tuple è incredibile ...

La cosa migliore è passare un po 'di tempo a consultare la documentazione per le diverse librerie e valutare se potrebbe esserti utile.

Degno !!

Ottieni molte delle cose che stanno arrivando in C ++ 0x. Ma a parte questa generalità, alcune delle migliori specifiche sono una semplice regex library , una libreria di casting per casting da stringhe a ints (cast lessicale):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

Una libreria di data / ora , tra altri ...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

Esiste anche una Interfaccia Python (Boost Python), un lexer / parser DSL (Boost Spirit):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

e questo è solo graffiare la superficie ...

Boost è fantastico, ma solo giocare a Devil's Advocate qui ci sono alcuni motivi per cui potresti non voler usare Boost:

  • A volte non riesce a compilare / funzionare correttamente su vecchi compilatori.
  • Aumenta spesso i tempi di compilazione più degli approcci meno pesanti.
  • Alcuni codici Boost potrebbero non fare ciò che pensi che faccia. Leggi la documentazione!
  • L'abuso di modelli può portare a messaggi di errore illeggibili.
  • L'abuso di modelli può portare a codice difficile da esaminare nel debugger.
  • È un limite al sanguinamento C ++. La prossima versione di Boost potrebbe non essere più compilata sul tuo attuale compilatore (precedente).

Tutto ciò non significa che non dovresti dare un'occhiata al codice Boost e ottenere alcune idee da solo anche se non usi Boost così com'è.

Boost è una raccolta di librerie C ++. 10 dei quali sono inclusi in tr1 di C ++ 0x.

Puoi iniziare con il boost qui .

Boost è una raccolta di librerie C ++ con peer review di alta qualità che pongono l'accento sulla portabilità e correttezza. Funziona come il banco di prova defacto per nuove aggiunte alla lingua e alla libreria standard. Controlla il loro sito Web per maggiori dettagli.

I vantaggi di Boost: È ampiamente disponibile, eseguirà il port su qualsiasi compilatore C ++ moderno o su qualsiasi piattaforma.
Le funzioni sono indipendenti dalla piattaforma, non è necessario apprendere un nuovo design di thread per ogni nuovo framework.
Incapsula molte funzioni specifiche di platfom, come i filesystem in modo standard.

È quello con cui C ++ avrebbe dovuto essere spedito! Gran parte della popolarità di Java è stata fornita con una libreria standard per fare tutto ciò che volevi. C ++ purtroppo ha ereditato solo le funzioni standard C / Unix limitate.

shared_ptr e weak_ptr, specialmente nel codice multithread, valgono da soli l'installazione di boost. BOOST_STATIC_ASSERT è anche abbastanza interessante per fare il controllo logico in fase di compilazione.

Il fatto che molte classi e utilità in boost siano nelle intestazioni, il che significa che puoi ottenere molte funzionalità senza dover compilare nulla, è anche un vantaggio. La portabilità di solito non è un problema, a meno che non si usi un compilatore estremamente vecchio. Una volta ho provato a far funzionare MPL con VC6 e ha stampato 40.000 avvisi / errori interni prima di esplodere completamente. Ma in generale la maggior parte della libreria dovrebbe funzionare indipendentemente dalla piattaforma o dal fornitore del compilatore.

Prendi in considerazione il fatto che alcune cose di Boost sono già in TR1 e molto probabilmente saranno nella prossima revisione della libreria standard C ++. Questa è un'approvazione piuttosto grande.

Boost è una libreria molto estesa di costrutti (di solito) generici che possono aiutare in quasi tutte le applicazioni. Ciò può essere dimostrato dal fatto che molti componenti boost sono stati inclusi nelle specifiche C ++ 0x.

È anche portatile su almeno le principali piattaforme e dovrebbe essere portabile praticamente su qualsiasi cosa con un compilatore C ++ per lo più conforme agli standard.

L'unico avvertimento è che possono esserci molte dipendenze mescolate tra le librerie boost, rendendo più difficile individuare solo un componente specifico da distribuire (oltre all'intera libreria boost).

Tutto quanto sopra, inoltre, incoraggia molte moderne tecniche C ++ best practice. Tende a migliorare la qualità del tuo codice.

Nota anche che la maggior parte dei boost sono i template, quindi non richiede la costruzione
(includi solo i file di intestazione corretti).

Le poche parti che richiedono la costruzione sono opzionali:
Ognuno di essi può essere creato indipendentemente, evitando così inutili gonfiori di codice non necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top