boost Tutorial
Iniziare con la spinta
Ricerca…
Osservazioni
Cos'è Boost?
Boost è una vasta raccolta di librerie C ++ gratuite di alta qualità che coprono una vasta gamma di argomenti. È spesso considerata una "seconda libreria standard" per C ++, poiché molti problemi comuni in C ++ vengono risolti usando Boost.
Da boost.org :
Boost fornisce librerie di sorgenti C ++ portatili con revisione peer gratuita.
Sottolineiamo librerie che funzionano bene con la libreria standard C ++. Le librerie Boost sono pensate per essere ampiamente utili e utilizzabili in un ampio spettro di applicazioni. La licenza Boost incoraggia l'uso commerciale e non commerciale.
Alcune librerie Boost hanno addirittura fatto la loro strada nella libreria standard C ++ 11, e di alcuni altri, come ad esempio Boost.Optional e Boost.Variant , sarà una parte di C ++ 17.
Cosa può fare Boost?
Boost copre la maggior parte degli angoli di programmazione. Dal wiki del tag boost qui su Stack Overflow:
Include librerie per:
- Elaborazione di stringhe e testi
- contenitori
- iteratori
- algoritmi
- Oggetti funzionali e programmazione superiore
- Programmazione generica
- Template Metaprogramming
- Preprocessore Metaprogramming
- Programmazione simultanea
- Matematica e numeri
- Correttezza e test
- Strutture dati
- Elaborazione delle immagini
- Input Output
- Supporto tra lingue
- Memoria
- parsing
- Interfacce di programmazione
- miscellaneo
- Soluzioni alternative del compilatore interrotte
Versioni
| Versione | Nuove biblioteche | Note di rilascio | Data di rilascio |
|---|---|---|---|
| 1.10.0 | gli appunti | 1999/12/14 | |
| 1.11.0 | Numero razionale | gli appunti | 2000/02/01 |
| 1.12.0 | gli appunti | 2000/02/23 | |
| 1.13.0 | Utilità, Tratti di tipo, Tratti di chiamata, Coppia compressa | gli appunti | 2000/02/29 |
| 1.14.0 | gli appunti | 2000/03/05 | |
| 1.15.0 | Numero casuale | gli appunti | 2000/06/17 |
| 1.16.0 | Intestazione funzionale, iteratore | gli appunti | 2000/06/28 |
| 1.17.0 | schieramento | gli appunti | 2000/08/03 |
| 1.18.0 | Grafico, espressione regolare | gli appunti | 2000/09/28 |
| 1.19.0 | Concept Check, Python, Static Assert, Proprietà Mappa Concetti | gli appunti | 2000/12/10 |
| 1.20.0 | Conversione | gli appunti | 2001/01/06 |
| 1.21.0 | Iterator Adapter, Pool, Test | gli appunti | 2001/03/09 |
| 1.22.0 | CRC | gli appunti | 2001/05/25 |
| 1.23.0 | Any, Function, Tokenizer, Funzioni speciali, Octonioni, Quaternioni | gli appunti | 2001/07/06 |
| 1.24.0 | tuple | gli appunti | 2001/08/19 |
| 1.25.0 | Thread, Bind | gli appunti | 2001-10-01 |
| 1.26.0 | Fattore comune, preprocessore | gli appunti | 2001/11/30 |
| 1.27.0 | gli appunti | 2002/02/05 | |
| 1.28.0 | Lambda, I / O State Saver | gli appunti | 2002/05/15 |
| 1.29.0 | Date-Time, Dynamic Bitset, Format | gli appunti | 2002/10/10 |
| 1.30.0 | Filesystem, Opzionale, Intervallo, MPL, Spirito | gli appunti | 2003/03/19 |
| 1.31.0 | enable_if, Variant | gli appunti | 2004-01-26 |
| 1.32.0 | Assegnazione, Minmax, Multi-Index, Conversione numerica, opzioni di programma, intervallo, Serializzazione, stringa, Tribool | gli appunti | 2004-11-19 |
| 1.33.0 | Iostream, Hash, Parameter, Contenitore puntatore, Wave | gli appunti | 2005/08/11 |
| 1.34.0 | Foreach, Statechart, TR1, Typeof, Xpressive | gli appunti | 2007-05-12 |
| 1.35.0 | Asio, Bimap, Buffer circolare, Tipi di funzioni, Fusion, GIL, Interprocess, Intrusive, Funzioni matematiche / speciali, Distribuzioni matematiche / statistiche, MPI, sistema | gli appunti | 2008-03-29 |
| 1.36.0 | Accumulatori, Eccezioni, Unità, Non Ordinate | gli appunti | 2008-08-14 |
| 1.37.0 | Proto | gli appunti | 2008-11-03 |
| 1.38.0 | Flyweight, ScopeExit, Swap | gli appunti | 2009-02-08 |
| 1.39.0 | Signals2 | gli appunti | 2009-05-02 |
| 1.40.0 | gli appunti | 2009-08-27 | |
| 1.41.0 | Albero delle proprietà | gli appunti | 2009-11-17 |
| 1.42.0 | uuid | gli appunti | 2010-02-02 |
| 1.43.0 | Funzionale / Fattore, Funzionale / Inoltra | gli appunti | 2010-05-06 |
| 1.44.0 | Meta State Machine, poligono | gli appunti | 2010-08-13 |
| 1.45.0 | gli appunti | 2010-11-19 | |
| 1.46.0 | ICL | gli appunti | 2011-02-21 |
| 1.46.1 | gli appunti | 2011-03-12 | |
| 1.47.0 | Chrono, Geometry, Phoenix, Ratio | gli appunti | 2011-07-11 |
| 1.48.0 | Contenitore, Locale, Sposta | gli appunti | 2011-11-15 |
| 1.49.0 | Mucchio | gli appunti | 2012-02-24 |
| 1.50.0 | Algorithm, Functional / OverloadedFunction, LocalFunction, Utility / IdentityType | gli appunti | 2012-06-28 |
| 1.51.0 | Contesto | gli appunti | 2012/08/20 |
| 1.52.0 | gli appunti | 2012/11/05 | |
| 1.53.0 | Atomico, Coroutine, Lockfree, Multiprecision, Odeint | gli appunti | 2013/02/04 |
| 1.54.0 | Log, TTI, Type Erasure | gli appunti | 2013/07/01 |
| 1.55.0 | Predef | gli appunti | 2013/11/11 |
| 1.56.0 | Allinea, TypeIndex | gli appunti | 2014/08/07 |
| 1.57.0 | gli appunti | 2014/11/03 | |
| 1.58.0 | Endian, Ordina | gli appunti | 2015/04/17 |
| 1.59.0 | Converti, Coroutine2 | gli appunti | 2015/08/13 |
| 1.60.0 | VMD | gli appunti | 2015/12/17 |
| 1.61.0 | Calcolo, DLL, Hana, Metaparse | gli appunti | 2016/05/13 |
| 1.62.0 | Fibra, QVM | gli appunti | 2016/09/28 |
| 1.63.0 | gli appunti | 2016/12/26 | |
| 1.64.0 | Processi | gli appunti | 2017/04/19 |
Installazione o configurazione
Vedi Boost Guida introduttiva .
La maggior parte delle librerie Boost sono solo di intestazione, il che significa che non c'è nulla da compilare o collegare.
Assicurati di ricevere la versione più recente di Boost:
- Visita www.boost.org
- Cerca il download della versione corrente. Attualmente, questo link qui .
- Seleziona il file di archivio appropriato per il tuo sistema operativo e scarica.
Le librerie di solo intestazioni possono quindi essere utilizzate semplicemente includendo i rispettivi file di intestazione.
Alcune librerie Boost richiedono la compilazione:
- Boost.Chrono
- Boost.Context
- Boost.Filesystem
- Boost.GraphParallel
- Boost.IOStreams
- Boost.Locale
- Boost.MPI
- Boost.ProgramOptions
- Boost.Python
- Boost.Regex
- Boost.Serialization
- Boost.Signals
- Boost.System
- Boost.Thread
- Boost.Timer
- Boost.Wave
Inoltre, le seguenti librerie hanno componenti che devono essere compilati:
Boost.DateTime
Boost.Graph
Boost.Math
Boost.Random
Boost.Test
Boost.Exception
La fonte di Boost può essere ottenuta tramite il link di download sul sito , che verrà reindirizzato alla sua pagina SourceForge per l'ultima versione ( 1.61.0 a luglio 2016). Questo può essere decompresso (o un-tared, ecc.) In una directory (come C: \ local \ boost_1_61_0). Questa directory può quindi essere aggiunta al percorso di inclusione per il software che si sta creando. Dopodiché puoi includere le intestazioni Boost nei file C ++ con #include <boost/header/path.hpp> .
La maggior parte delle librerie in Boost sono solo di intestazione. Se ti servono solo questi, la distribuzione di cui sopra è tutto ciò che è necessario. Tuttavia, se è necessario utilizzare una delle librerie che richiede la compilazione di un binario compilato, sarà necessario anche quello.
Su qualsiasi sistema, il modo più affidabile per ottenere i binari corretti è costruirli da soli. Queste istruzioni sono leggermente diverse per Windows o Linux / Unix / POSIX .
Su Windows con Visual Studio, un'alternativa alla creazione delle librerie è di scaricare le librerie predefinite dalla pagina di SourceForge di Boost ( 1.61.0 a luglio 2016). In questa pagina è possibile selezionare un programma di installazione che installerà una versione per una build di Visual Studio specifica o il file 7-zip (boost_X_XX_X-bin-all-32-64.7z) che contiene i file binari per tutte le versioni di Visual Studio supportate. Una di queste opzioni include l'origine / le intestazioni e i binari, quindi non è necessario aver scaricato la distribuzione di origine sopra. Una volta ottenuto, estrai / installa in una directory (come C: \ local \ boost_1_61_0) e aggiungi quella directory al tuo percorso di inclusione, quindi aggiungi la directory contenente i binari che corrispondono alla tua versione di Visual Studio (ad es. C: \ local \ boost_1_61_0 \ lib32-msvc-12.0 per i progetti a 32 bit di Visual Studio 2013) al percorso della libreria.
Installazione ed esecuzione di Boost (Cygwin)
(Livello principianti, IDE: CLion)
Innanzitutto, installa boost dal mirror Cygwin: apri l'install exe, cerca boost, installa i pacchetti.
Dopo l'installazione di boost, si troverà in /usr/include/boost . Questo è dove tutto è. Tutte le istruzioni #include saranno un percorso dalla cartella boost, come in: #include <boost/archive/text_oarchive.hpp> .
Una volta inclusi i file boost di tua scelta nei tuoi file .cpp , il codice non verrà ancora compilato nel tuo IDE preferito fino a quando non colleghi le librerie e dici a cmake di cercare il codice boost scaricato .
Per ottenere cmake per cercare il tuo codice boost,
find_package(Boost 1.60.0 COMPONENTS components_you_want)
# for example:
find_package(Boost 1.60.0 COMPONENTS serialization)
Quindi, includi le directory: include_directories(${Boost_INCLUDE_DIRS})
Infine, aggiungi il tuo eseguibile e collega le librerie:
add_executable(your_target ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -any_missing_boostlibs)
Prima di iniziare il tuo programma, evita di eseguire un dump degli errori testando se è stato trovato boost prima di includere qualcosa o di eseguire il tuo codice:
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(YourTarget ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -missing_libs)
endif()
Ho incluso -missing_libs perché un errore che potresti incontrare è che alcune librerie di boost o altre potrebbero non essere state collegate, e devi aggiungerlo manualmente - per esempio, il link a cui ho fatto riferimento in precedenza.
Tutti insieme, un file CMakeLists.txt finale potrebbe essere simile a qualcosa:
cmake_minimum_required(VERSION 3.7)
project(your_project)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp tmap.cpp tmap.h)
find_package(Boost 1.60.0 COMPONENTS serialization)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(your_project ${SOURCE_FILES})
target_link_libraries(your_project ${Boost_LIBRARIES})
endif()