C++: Standard- und Boost-Library Workshop

24.07.2018

27.01.2020 - 31.01.2020

Veranstaltungsort: München,MicroConsult

C++: Standard- und Boost-Library Workshop

Neben der sicheren Beherrschung der Sprachsyntax werden von C++-EntwicklerInnen solide Kenntnisse im Bereich der Standard-Bibliothek erwartet, um deren Funktionalität im Rahmen der zu lösenden Aufgaben untertstützend einzusetzen.

Neben der sicheren Beherrschung der Sprachsyntax werden von C++-EntwicklerInnen solide Kenntnisse im Bereich der Standard-Bibliothek erwartet, um deren Funktionalität im Rahmen der zu lösenden Aufgaben untertstützend einzusetzen. Da die Standard-Bibliothek der ersten Standardisierung (mit C++98) durch die Sprachstandards (C++11 und C++14) auf den nahezu doppelten Umfang gewachsen ist, wurde der STL-Teil ausgelagert (abgesehen von einem sehr kurzen Überblick), während das hier beschriebenen Training alle anderen Teile behandelt (siehe auch Inhaltsangabe). In Bereichen, in denen nach aktuellem C++ Standard noch Lücken bestehen, werden auch auf der Boost-Plattform entstandene Library-Komponenten einbezogen, ebenso wenn Boost-Komponenten vorhandene Standard-Funktionalitäten in besonders praxisrelevanter Weise erweitern.

 

Inhalt

DURCH C++11/14 ERSETZE BOOST-FEATURES

Container-Initialisierung

  • C++11 "std::list_initializer"
  • vs. Boost.Assign

 

Sperren von Defaults

  • C++11 "= delete"
  • vs. Boost.NonCopyable

 

Bereichsbasierte Schleifen

  • C++11: Range-"for"
  • vs. BOOST_FOREACH

 

Lambdas (Funktions-Literale)

  • C++11 Lambda-Syntax
  • vs. Boost.Lambda

 

Statische Zusicherungen

  • C++11 "static_assert"
  • vs. BOOST_STATIC_ASSERT

 

Binäre Konstanten

  • C++14 "0bXXXX"
  • vs. BOOST_BINARY

 

"Move-Only"-Datentypen

  • C++11 Rvalue-Referenzen
  • Boost.Scoped_ptr
  • Boost.Ptr_container

 

KLEINERE HELFER

Umwandlung zwischen Strings / Zahlen

  • C++11 "std::to_string" / "std::strtoXX"
  • Boost "lexical_cast"
  • Boost "numeric_cast"

 

C++14 Standard-Literal-Suffixe

Boost.ScopeExit

Boost.ProgramOptions

ZEICHENKETTEN-VERARBEITUNG

Zeichen-Grundypen und -Kodierung

"std::string" vs. "std::vector"

Reguläre Ausdrücke für

  • Vergleiche
  • Zerlegungen
  • Ersetzungen

 

Boost.String_algo

Boost.Tokenizer

CONTAINER, ALGORITHMEN UND ITERATOREN

Kurzer STL-Überblick

Auswahlkriterien für Container

  • STL-Container (inkl. "unordered associative")
  • Boost-Container (BiMap, MultiIndex, PropertyTree)

 

Boost-Erweiterungen bei

  • Algorithmen (insbesondere Boost.Range)
  • Iteratoren (insbesondere Boost.Iterator)

 

Tuple

Boost.Optional

Boost.Any

Boost.Variant

EIN-/AUSGABE (STREAMS)

Grundlegendes Design

Erweiterbarkeit

  • bei E/A-Operatoren
  • beim Buffer-Interface

 

Boost.IoStateSavers

Boost.Format

Boost.IoStreams

Boost.Serialization

Boost.FileSystem

FUNKTIONALE PROGRAMMIERUNG

Funktionen, Funktoren und Lambdas ("Callables")

Lambdas und "Closures"

Lambdas vs. "std::bind"

Type-Erasure mit "std::function"

Boost.Bind und Boost.Function

SMART-POINTER

C++11 "std::unique_ptr"

C++11 "std::shared_ptr"

C++11 "std::weak_ptr"

Boost.IntrusivePtr

CHRONO-LIBRARY

Grundlegende Konzepte

Zeitpunkte ("clocks")

Zeitspannen ("durations")

Boost.Chrono

RANDOM-LIBRARY

Vor-/Nachteile von "std::rand" (C89)

C++11 Generatoren für Zufallszahlen

C++11 Zufalls-Verteilungen

Boost.Random

PARALLELISIERUNG VON ABLÄUFEN

C++11 Abstraktionen

  • asynchroner Funktionsaufruf
  • "Mutex"- und "Lock"-Synchronisation
  • "Condition Variables"

 

C++11 Explizites Multithreading

Boost.Thread

COMPILEZEIT-METAPROGRAMMIERUNG

C++11 Standardisierte Type-Traits

  • Compile-Zeit Tests …
  • … und Typ-Berechnungen
  • C++14 Vereinfachungen

 

C++11 "std::enable_if"

C++11 "std::ratio"

C++1z "Fold Expressions"

Boost.Calltraits

Boost.MPL

Überbick zu weiteren Boost-Libraries

  • Boost.Asio Boost.Exception Boost.Flightweight
  • Boost.Fusion
  • Boost.Interval
  • Boost.Msm und Boost.Statechart
  • Boost.Preprocessor
  • Boost.PropertyMap
  • Boost.Proto,
  • Boost.Rational
  • Boost.Signals / Boost.Signals2
  • Boost.Spirit (Qi, Karma, Phoenix)
  • Boost.Test
  • Boost.Tribool
  • Boost.Units
  • Boost.Uuid
  • Boost.Wave
  • Boost.Xpressive

 

Begleitend: Mikro-Projekte

  • Demo-Code und/oder Aufgaben zur eigenen Bearbeitung nach Wahl
  • inkl. anschließender Erläuterung möglicher Variationen

 

Dieses Training entspricht teilweise dem früheren "C++11 und Boost Libraries Workshop", jedoch mit deutlich geänderten Schwerpunkten gegenüber der Durchführung bis Mitte 2013.