boostAan de slag met boost


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:

  1. Bezoek www.boost.org
  2. Zoek naar de download van de huidige versie. Momenteel is deze link hier . Toont waar u op de boost-website Boost kunt downloaden
  3. 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()