boost Tutorial
Erste Schritte mit boost
Suche…
Bemerkungen
Was ist Boost?
Boost ist eine große Sammlung kostenloser, qualitativ hochwertiger C ++ - Bibliotheken, die ein breites Themenspektrum abdecken. Sie wird oft als "zweite Standardbibliothek" für C ++ betrachtet, da viele häufige Probleme in C ++ durch die Verwendung von Boost gelöst werden.
Von boost.org :
Boost bietet kostenlose Peer-Review-portable C ++ - Quellbibliotheken.
Wir betonen Bibliotheken, die gut mit der C ++ - Standardbibliothek funktionieren. Boost-Bibliotheken sollen weithin nützlich und für ein breites Anwendungsspektrum einsetzbar sein. Die Boost-Lizenz ermöglicht sowohl die kommerzielle als auch die nicht kommerzielle Nutzung.
Einige Boost-Bibliotheken haben sogar ihren Weg in die C ++ 11-Standardbibliothek gefunden, und andere, wie Boost.Optional und Boost.Variant , werden in C ++ 17 integriert.
Was kann Boost tun?
Boost deckt die meisten Ecken der Programmierung ab. Aus dem Boost-Tag-Wiki hier auf Stack Overflow:
Es enthält Bibliotheken für:
- String- und Textverarbeitung
- Behälter
- Iteratoren
- Algorithmen
- Funktionsobjekte und übergeordnete Programmierung
- Generische Programmierung
- Metaprogrammierung von Vorlagen
- Präprozessor-Metaprogrammierung
- Gleichzeitige Programmierung
- Mathematik und Numerik
- Korrektheit und Prüfung
- Datenstrukturen
- Bildverarbeitung
- Input-Output
- Sprachübergreifende Unterstützung
- Erinnerung
- Parsing
- Schnittstellen programmieren
- Verschiedenes
- Fehlerhafte Compiler-Workarounds
Versionen
| Ausführung | Neue Bibliotheken | Versionshinweise | Veröffentlichungsdatum |
|---|---|---|---|
| 1.10.0 | Anmerkungen | 1999-12-14 | |
| 1.11.0 | Rationale Zahl | Anmerkungen | 2000-02-01 |
| 1.12.0 | Anmerkungen | 2000-02-23 | |
| 1.13.0 | Dienstprogramm, Typmerkmale, Anrufmerkmale, Komprimiertes Paar | Anmerkungen | 2000-02-29 |
| 1.14.0 | Anmerkungen | 2000-03-05 | |
| 1.15.0 | Zufallszahl | Anmerkungen | 2000-06-17 |
| 1.16.0 | Funktioneller Iterator-Header | Anmerkungen | 2000-06-28 |
| 1.17.0 | Array | Anmerkungen | 2000-08-03 |
| 1.18.0 | Graph, regulärer Ausdruck | Anmerkungen | 2000-09-28 |
| 1.19.0 | Concept Check, Python, Static Assert, Property Map-Konzepte | Anmerkungen | 2000-12-10 |
| 1,20,0 | Umwandlung | Anmerkungen | 2001-01-06 |
| 1.21.0 | Iteratoradapter, Pool, Test | Anmerkungen | 2001-03-09 |
| 1.22.0 | CRC | Anmerkungen | 2001-05-25 |
| 1,23,0 | Any, Funktion, Tokenizer, Sonderfunktionen, Oktonionen, Quaternionen | Anmerkungen | 2001-07-06 |
| 1.24.0 | Tupel | Anmerkungen | 2001-08-19 |
| 1,25,0 | Faden, binden | Anmerkungen | 2001-10-01 |
| 1.26.0 | Common Factor, Präprozessor | Anmerkungen | 2001-11-30 |
| 1,27,0 | Anmerkungen | 2002-02-05 | |
| 1,28,0 | Lambda, I / O State Saver | Anmerkungen | 2002-05-15 |
| 1,29,0 | Datum-Uhrzeit, dynamisches Bitset, Format | Anmerkungen | 2002-10-10 |
| 1,30,0 | Dateisystem, optional, Intervall, MPL, Spirit | Anmerkungen | 2003-03-19 |
| 1,31,0 | enable_if, Variante | Anmerkungen | 2004-01-26 |
| 1,32,0 | Zuordnung, Minmax, Multi-Index, Numerische Konvertierung, Programmoptionen, Bereich, Serialisierung, String, Tribool | Anmerkungen | 2004-11-19 |
| 1,33,0 | Iostream, Hash, Parameter, Zeigercontainer, Wave | Anmerkungen | 2005-08-11 |
| 1,34,0 | Foreach, Statechart, TR1, Typeof, Xpressive | Anmerkungen | 2007-05-12 |
| 1,35,0 | Asio, Bimap, Kreispuffer, Funktionstypen, Fusion, GIL, Interprozess, Aufdringlich, Mathematik / Sonderfunktionen, Mathematische / statistische Verteilungen, MPI, System | Anmerkungen | 2008-03-29 |
| 1,36,0 | Akkus, Ausnahme, Einheiten, ungeordnet | Anmerkungen | 2008-08-14 |
| 1,37,0 | Proto | Anmerkungen | 2008-11-03 |
| 1,38,0 | Fliegengewicht, ScopeExit, Swap | Anmerkungen | 2009-02-08 |
| 1.39.0 | Signale2 | Anmerkungen | 2009-05-02 |
| 1,40,0 | Anmerkungen | 2009-08-27 | |
| 1.41.0 | Eigenschaftsbaum | Anmerkungen | 2009-11-17 |
| 1.42.0 | Uuid | Anmerkungen | 2010-02-02 |
| 1.43.0 | Funktional / Faktor, Funktional / Vorwärts | Anmerkungen | 2010-05-06 |
| 1,44,0 | Meta State Machine, Polygon | Anmerkungen | 2010-08-13 |
| 1,45,0 | Anmerkungen | 2010-11-19 | |
| 1,46,0 | Icl | Anmerkungen | 2011-02-21 |
| 1.46.1 | Anmerkungen | 2011-03-12 | |
| 1,47,0 | Chrono, Geometrie, Phönix, Verhältnis | Anmerkungen | 2011-07-11 |
| 1,48,0 | Container, Gebietsschema, Verschieben | Anmerkungen | 2011-11-15 |
| 1,49,0 | Haufen | Anmerkungen | 2012-02-24 |
| 1,50,0 | Algorithmus, Functional / OverloadedFunction, LocalFunction, Dienstprogramm / IdentityType | Anmerkungen | 2012-06-28 |
| 1.51.0 | Kontext | Anmerkungen | 2012-08-20 |
| 1.52.0 | Anmerkungen | 2012-11-05 | |
| 1,53,0 | Atomic, Coroutine, Lockfree, Multiprecision, Odeint | Anmerkungen | 2013-02-04 |
| 1.54.0 | Protokoll, TTI, Typlöschung | Anmerkungen | 2013-07-01 |
| 1,55,0 | Predef | Anmerkungen | 2013-11-11 |
| 1.56.0 | Ausrichten, typeIndex | Anmerkungen | 2014-08-07 |
| 1,57,0 | Anmerkungen | 2014-11-03 | |
| 1,58,0 | Endian, Sort | Anmerkungen | 2015-04-17 |
| 1,59,0 | Konvertieren Sie Coroutine2 | Anmerkungen | 2015-08-13 |
| 1,60,0 | VMD | Anmerkungen | 2015-12-17 |
| 1.61.0 | Berechnen, DLL, Hana, Metaparse | Anmerkungen | 2016-05-13 |
| 1.62.0 | Faser, QVM | Anmerkungen | 2016-09-28 |
| 1,63,0 | Anmerkungen | 2016-12-26 | |
| 1,64,0 | Verarbeiten | Anmerkungen | 2017-04-19 |
Installation oder Setup
Siehe Boost-Erste Schritte .
Die meisten Boost-Bibliotheken sind nur Header, was bedeutet, dass Sie nichts kompilieren oder verknüpfen müssen.
Stellen Sie sicher, dass Sie die neueste Version von Boost erhalten:
- Besuchen Sie www.boost.org
- Suchen Sie nach dem Download der aktuellen Version. Derzeit ist dies hier verlinkt.
- Wählen Sie die entsprechende Archivdatei für Ihr Betriebssystem aus und laden Sie sie herunter.
Nur-Header-Bibliotheken können dann verwendet werden, indem einfach die entsprechenden Header-Dateien eingefügt werden.
Einige Boost-Bibliotheken müssen kompiliert werden:
- Boost.Chrono
- Boost.Context
- Boost.Filesystem
- Boost.GraphParallel
- Boost.IOStreams
- Boost.Locale
- Boost.MPI
- Boost.ProgramOptions
- Boost.Python
- Boost.Regex
- Boost.Serialisierung
- Boost.Signale
- Boost.System
- Boost.Thread
- Boost.Timer
- Boost.Wave
Die folgenden Bibliotheken haben auch Komponenten, die kompiliert werden müssen:
Boost.DateTime
Boost.Graph
Boost.Math
Boost.Random
Boost.Test
Boost.Exception
Die Quelle für Boost kann über den Download-Link auf der Website abgerufen werden , der auf seine SourceForge-Seite für die neueste Version ( 1.61.0 ab Juli 2016) verweist . Dies kann in ein Verzeichnis (z. B. C: \ local \ boost_1_61_0) entpackt (oder nicht tariert usw.) werden. Dieses Verzeichnis kann dann zum Include-Pfad für die von Ihnen erstellte Software hinzugefügt werden. Danach können Sie Boost-Header in C ++ - Dateien mit #include <boost/header/path.hpp> .
Die Mehrzahl der Bibliotheken in Boost ist nur Header. Wenn Sie nur diese benötigen, reicht die obige Quelldistribution aus. Wenn Sie jedoch eine der Bibliotheken verwenden müssen, für die eine kompilierte Binärdatei erstellt werden muss, benötigen Sie dies ebenfalls.
Bei jedem System ist der zuverlässigste Weg, die korrekten Binärdateien zu erhalten, die eigene Erstellung. Diese Anweisungen sind für Windows oder Linux / Unix / POSIX etwas anders.
Unter Windows mit Visual Studio können Sie die Bibliotheken selbst erstellen, indem Sie vorgefertigte Bibliotheken von der SourceForge-Seite von Boost ( 1.61.0, Stand Juli 2016) herunterladen. Auf dieser Seite können Sie ein Installationsprogramm auswählen, das eine Version für einen bestimmten Visual Studio-Build oder die 7-zip-Datei (boost_X_XX_X-bin-all-32-64.7z) installiert, die die Binärdateien für alle unterstützten Visual Studio-Versionen enthält. Jede dieser Optionen umfasst die Quelle / Kopfzeilen sowie die Binärdateien, sodass die oben angegebene Quelldistribution nicht heruntergeladen werden muss. Entpacken Sie anschließend / install in ein Verzeichnis (z. B. C: \ local \ boost_1_61_0) und fügen Sie dieses Verzeichnis zu Ihrem Include-Pfad hinzu. Fügen Sie dann das Verzeichnis mit den Binärdateien hinzu, die Ihrer Version von Visual Studio entsprechen (z. B. C: \ local \ boost_1_61_0 \ lib32-msvc-12.0 für 32-Bit-Projekte von Visual Studio 2013) zum Bibliothekspfad.
Boost installieren und ausführen (Cygwin)
(Anfängerstufe; IDE: CLion)
Installieren Sie zunächst Boost über den Cygwin-Spiegel: Öffnen Sie das Installationsexe, suchen Sie nach Boost, installieren Sie die Pakete.
Nachdem der Boost installiert ist, befindet er sich in /usr/include/boost . Hier ist alles. Alle #include Anweisungen sind ein Pfad aus dem Boost-Ordner, z. B. in: #include <boost/archive/text_oarchive.hpp> .
Wenn Sie die Boost-Dateien Ihrer Wahl in Ihre .cpp Dateien aufnehmen, wird Ihr Code immer noch nicht in Ihrer IDE der Wahl kompiliert, bis Sie die Bibliotheken verknüpfen und cmake anweisen, nach dem heruntergeladenen Boost-Code zu suchen .
Um zu erreichen, dass cmake nach Ihrem Boost-Code sucht,
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}) dann die Verzeichnisse ein: include_directories(${Boost_INCLUDE_DIRS})
Fügen Sie schließlich Ihre ausführbare Datei hinzu und verknüpfen Sie die Bibliotheken:
add_executable(your_target ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -any_missing_boostlibs)
Vermeiden Sie vor dem Starten Ihres Programms einen Fehlerabzug, indem Sie testen, ob ein Boost gefunden wurde, bevor Sie etwas hinzufügen oder Ihren Code ausführen:
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(YourTarget ${SOURCE_FILES})
target_link_libraries(your_target ${Boost_LIBRARIES} -missing_libs)
endif()
Ich enthalten -missing_libs , weil ein Fehler , den Sie in ist ausgeführt, dass einige Boost - Bibliothek oder eine andere möglicherweise nicht in Verbindung gebracht wurden, und Sie müssen es manuell hinzufügen - zum Beispiel den Link ich früher verwiesen.
Alles in allem könnte eine endgültige CMakeLists.txt-Datei ungefähr so aussehen:
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()