boost Zelfstudie
Aan de slag met boost
Zoeken…
Opmerkingen
Wat is boost?
Boost is een grote verzameling gratis C ++ -bibliotheken van hoge kwaliteit die een breed scala aan onderwerpen behandelen. Het wordt vaak beschouwd als een "tweede standaardbibliotheek" voor C ++, omdat veel voorkomende problemen in C ++ worden opgelost met behulp van Boost.
Van boost.org :
Boost biedt gratis peer-reviewed draagbare C ++ bronbibliotheken.
We benadrukken bibliotheken die goed werken met de C ++ Standard Library. Boostbibliotheken zijn bedoeld als breed bruikbaar en bruikbaar in een breed spectrum van toepassingen. De Boost-licentie stimuleert zowel commercieel als niet-commercieel gebruik.
Sommige Boost-bibliotheken hebben zelfs hun weg gevonden naar de standaardbibliotheek C ++ 11, en andere, zoals Boost.Optional en Boost.Variant , zullen deel uitmaken van C ++ 17.
Wat kan Boost doen?
Boost dekt de meeste hoeken van het programmeren. Van de boost-tag wiki hier op Stack Overflow:
Het bevat bibliotheken voor:
- String- en tekstverwerking
- containers
- iterators
- algoritmes
- Functieobjecten en hogere-orde programmering
- Generieke programmering
- Sjabloon Metaprogramming
- Voorprocessor metaprogrammering
- Gelijktijdige programmering
- Wiskunde en cijfers
- Juistheid en testen
- Data structuren
- Afbeelding verwerken
- Invoer uitvoer
- Ondersteuning in verschillende talen
- Geheugen
- Parsing
- Programmeren van interfaces
- Diversen
- Verbroken compiler-oplossingen
versies
| Versie | Nieuwe bibliotheken | Release-opmerkingen | Publicatiedatum |
|---|---|---|---|
| 1.10.0 | aantekeningen | 1999/12/14 | |
| 1.11.0 | Rationaal getal | aantekeningen | 2000/02/01 |
| 1.12.0 | aantekeningen | 2000-02-23 | |
| 1.13.0 | Hulpprogramma, typekenmerken, gesprekskenmerken, gecomprimeerd paar | aantekeningen | 2000/02/29 |
| 1.14.0 | aantekeningen | 2000/03/05 | |
| 1.15.0 | Willekeurig nummer | aantekeningen | 2000/06/17 |
| 1.16.0 | Functioneel, iterator-header | aantekeningen | 2000/06/28 |
| 1.17.0 | reeks | aantekeningen | 2000/08/03 |
| 1.18.0 | Grafiek, reguliere expressie | aantekeningen | 2000/09/28 |
| 1.19.0 | Concept Check, Python, Static Assert, Eigenschap kaart concepten | aantekeningen | 2000/12/10 |
| 1.20.0 | conversie | aantekeningen | 2001/01/06 |
| 1.21.0 | Iterator-adapter, zwembad, test | aantekeningen | 2001/03/09 |
| 1.22.0 | CRC | aantekeningen | 2001/05/25 |
| 1.23.0 | Elke functie, Tokenizer, Speciale functies, octonions, quaternions | aantekeningen | 2001/07/06 |
| 1.24.0 | tupel | aantekeningen | 2001/08/19 |
| 1.25.0 | Draad, binden | aantekeningen | 2001-10-01 |
| 1.26.0 | Gemeenschappelijke factor, voorprocessor | aantekeningen | 2001/11/30 |
| 1.27.0 | aantekeningen | 2002/02/05 | |
| 1.28.0 | Lambda, I / O State Saver | aantekeningen | 2002/05/15 |
| 1.29.0 | Datum-tijd, Dynamic Bitset, Formaat | aantekeningen | 2002/10/10 |
| 1.30.0 | Bestandssysteem, Optioneel, Interval, MPL, Spirit | aantekeningen | 2003/03/19 |
| 1.31.0 | enable_if, Variant | aantekeningen | 2004-01-26 |
| 1.32.0 | Opdracht, Minmax, Multi-Index, Numerieke conversie, programma-opties, bereik, Serialisatie, String, Tribool | aantekeningen | 2004-11-19 |
| 1.33.0 | Iostream, Hash, Parameter, Aanwijzercontainer, Wave | aantekeningen | 2005-08-11 |
| 1.34.0 | Foreach, Statechart, TR1, Typeof, Xpressive | aantekeningen | 2007-05-12 |
| 1.35.0 | Asio, Bimap, Circular Buffer, Functietypen, Fusion, GIL, Interprocess, Intrusive, Wiskunde / speciale functies, Wiskundige / statistische distributies, MPI, systeem | aantekeningen | 2008-03-29 |
| 1.36.0 | Accumulatoren, uitzonderingen, eenheden, ongeordend | aantekeningen | 2008-08-14 |
| 1.37.0 | Proto | aantekeningen | 2008-11-03 |
| 1.38.0 | Vlieggewicht, ScopeExit, Swap | aantekeningen | 2009-02-08 |
| 1.39.0 | Signals2 | aantekeningen | 2009-05-02 |
| 1.40.0 | aantekeningen | 2009-08-27 | |
| 1.41.0 | Property Tree | aantekeningen | 2009-11-17 |
| 1.42.0 | uuid | aantekeningen | 2010-02-02 |
| 1.43.0 | Functioneel / factor, functioneel / vooruit | aantekeningen | 2010-05-06 |
| 1.44.0 | Meta State Machine, veelhoek | aantekeningen | 2010-08-13 |
| 1.45.0 | aantekeningen | 2010-11-19 | |
| 1.46.0 | icl | aantekeningen | 2011-02-21 |
| 1.46.1 | aantekeningen | 2011-03-12 | |
| 1.47.0 | Chrono, geometrie, Phoenix, ratio | aantekeningen | 2011-07-11 |
| 1.48.0 | Container, Landinstelling, Verplaatsen | aantekeningen | 2011-11-15 |
| 1.49.0 | Hoop | aantekeningen | 2012-02-24 |
| 1.50.0 | Algoritme, functionele / overbelaste functie, LocalFunction, Utility / IdentityType | aantekeningen | 2012-06-28 |
| 1.51.0 | Context | aantekeningen | 2012-08-20 |
| 1.52.0 | aantekeningen | 2012/11/05 | |
| 1.53.0 | Atomic, Coroutine, Lockfree, Multiprecision, Odeint | aantekeningen | 2013/02/04 |
| 1.54.0 | Logboek, TTI, Type wissen | aantekeningen | 2013/07/01 |
| 1.55.0 | Voorgedef | aantekeningen | 2013/11/11 |
| 1.56.0 | Uitlijnen, TypeIndex | aantekeningen | 2014/08/07 |
| 1.57.0 | aantekeningen | 2014/11/03 | |
| 1.58.0 | Endian, Sort | aantekeningen | 2015/04/17 |
| 1.59.0 | Converteren, Coroutine2 | aantekeningen | 2015/08/13 |
| 1.60.0 | VMD | aantekeningen | 2015/12/17 |
| 1.61.0 | Berekenen, DLL, Hana, Metaparse | aantekeningen | 2016/05/13 |
| 1.62.0 | Vezel, QVM | aantekeningen | 2016/09/28 |
| 1.63.0 | aantekeningen | 2016/12/26 | |
| 1.64.0 | Werkwijze | aantekeningen | 2017/04/19 |
Installatie of instellingen
Zie Boost Aan de slag .
De meeste Boost-bibliotheken zijn alleen koptekst, wat betekent dat u niets hoeft te compileren of te linken.
Zorg ervoor dat u de meest recente versie van Boost krijgt:
- Bezoek www.boost.org
- Zoek naar de download van de huidige versie. Momenteel is deze link hier .
- Selecteer het juiste archiefbestand voor uw besturingssysteem en download.
Bibliotheken met alleen koptekst kunnen vervolgens worden gebruikt door eenvoudigweg de bijbehorende koptekstbestanden op te nemen.
Enkele Boost-bibliotheken vereisen compilatie:
- 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
Ook bevatten de volgende bibliotheken componenten die moeten worden gecompileerd:
Boost.DateTime
Boost.Graph
Boost.Math
Boost.Random
Boost.Test
Boost.Exception
De bron voor Boost kan worden verkregen via de downloadlink op de site , die naar de SourceForge-pagina zal gaan voor de nieuwste versie ( 1.61.0 vanaf juli 2016). Dit kan worden uitgepakt (of niet getarreerd, enz.) Naar een map (zoals C: \ local \ boost_1_61_0). Deze map kan vervolgens worden toegevoegd aan het include-pad voor de software die u bouwt. Hierna kunt u Boost-headers opnemen in C ++ -bestanden met #include <boost/header/path.hpp> .
De meerderheid van de bibliotheken in Boost zijn alleen koptekst. Als u deze alleen nodig hebt, is de bovenstaande brondistributie alles wat nodig is. Als u echter een van de bibliotheken moet gebruiken waarvoor een gecompileerd binair bestand moet worden gebouwd, hebt u dat ook nodig.
Op elk systeem is de meest betrouwbare manier om de juiste binaire bestanden te krijgen, ze zelf te bouwen. Deze aanwijzingen verschillen enigszins voor Windows of Linux / Unix / POSIX .
Een alternatief voor het bouwen van de bibliotheken op Windows met Visual Studio is om vooraf gebouwde bibliotheken te downloaden van Boost's SourceForge-pagina ( 1.61.0 vanaf juli 2016). Op die pagina kunt u een installatieprogramma selecteren dat een versie installeert voor een specifieke Visual Studio-build of het 7-zipbestand (boost_X_XX_X-bin-all-32-64.7z) dat de binaries bevat voor alle ondersteunde Visual Studio-versies. Beide opties omvatten de bron / kopteksten en de binaire bestanden, dus het is niet nodig om de bovenstaande brondistributie te downloaden. Zodra je het hebt, pak je het uit / installeer je het in een map (zoals C: \ local \ boost_1_61_0) en voeg je die map toe aan je include-pad. Voeg vervolgens de map toe met de binaire bestanden die overeenkomen met je versie van Visual Studio (bijvoorbeeld C: \ local \ boost_1_61_0 \ lib32-msvc-12.0 voor 32-bits projecten van Visual Studio 2013) naar het bibliotheekpad.
Boost installeren en uitvoeren (Cygwin)
(Beginnersniveau; IDE: CLion)
Installeer eerst boost vanuit de Cygwin mirror: open de exe-installatie, zoek naar boost, installeer de pakketten.
Nadat boost is geïnstalleerd: deze bevindt zich in /usr/include/boost . Dit is waar alles is. Alle #include instructies zijn een pad uit de boost-map, zoals in: #include <boost/archive/text_oarchive.hpp> .
Als je eenmaal onder de boost-bestanden van uw keuze in uw .cpp bestanden, zal uw code nog steeds niet compileren in uw IDE keuze totdat u een koppeling bibliotheken en vertel cmake te zoeken naar uw gedownloade boost code .
Om cmake ertoe te brengen uw boostcode te zoeken,
find_package(Boost 1.60.0 COMPONENTS components_you_want)
# for example:
find_package(Boost 1.60.0 COMPONENTS serialization)
include_directories(${Boost_INCLUDE_DIRS}) vervolgens de mappen op: include_directories(${Boost_INCLUDE_DIRS})
Voeg ten slotte uw uitvoerbare bestand toe en koppel de bibliotheken:
add_executable(your_target ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -any_missing_boostlibs)
Voordat u uw programma start, moet u een foutdump vermijden door te testen of er een boost is gevonden voordat u iets opneemt of uw code uitvoert:
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(YourTarget ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -missing_libs)
endif()
Ik heb -missing_libs omdat een fout die je tegen kunt komen is dat een of andere boost-bibliotheek of een andere misschien niet is gekoppeld, en je moet deze handmatig toevoegen - bijvoorbeeld de link waarnaar ik eerder heb verwezen.
Alles bij elkaar kan een definitief CMakeLists.txt-bestand er ongeveer zo uitzien:
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()