cpp2023W27
Begleitseite zur Schulung C++For 2023 KW27
(am Ende des Links die "-1" nicht vergessen)
Recent Links (if any)
- https://godbolt.org/z/5dbjrWqna
- Github Repository (wird auch nach dem Kurs noch aktualisiert, sowohl basierend auf den diesmaligen Erfahrungen mit der Übung als auch bei Verwendung in künftigen Kursen)
https://github.com/tbfe-de/cppfor2023w27 - https://godbolt.org/z/6oMYGxjzs
Ungefähre Zeitplanung (Feinabstimmung nach Teilnehmerinteresse)
MONTAG
- Kurze Wiederholung und ggf. Vertiefung von Themen, die (mittlerweile) in der Schulung C++-Grundlagen behandelt werden.
- "Rvalue-Referenzen" inkl. "std::move" (Anmerkung: das zugehörige "std::forward" folgt später im Template Kapitel)
- Live-Demo Move-Only Klasse mit Native Pointer
https://godbolt.org/z/z6GW34xcx - Live-Demo Move-Only Klasse mit std::unique_ptr
https://godbolt.org/z/eqWecEcMn
- Live-Demo Move-Only Klasse mit Native Pointer
- Weiterhin wurde gewünscht (und behandelt):
Scoped/Typesafe Enumerations
Uniform Initialization- dazu Beispiel auf Folie F23 (zeigt die Mehrdeutigkeit bei std::initializer_list bestehend aus nur einem Element wenn als Konstruktor-Argument verwendet)
https://godbolt.org/z/1sYGfT9xd
- dazu Beispiel auf Folie F23 (zeigt die Mehrdeutigkeit bei std::initializer_list bestehend aus nur einem Element wenn als Konstruktor-Argument verwendet)
- "Rvalue-Referenzen" inkl. "std::move" (Anmerkung: das zugehörige "std::forward" folgt später im Template Kapitel)
- Kapitel "Exception Handling"
- Alle Beispiele in kompilierbarer Form
https://godbolt.org/z/S4op5a (copy-paste EX-21...24)
https://godbolt.org/z/A6bg9U (copy-paste EX-15...18)
https://godbolt.org/z/ve-bBX (copy-paste EX-25)
https://godbolt.org/z/m7K92A (copy-paste EX-26)
https://godbolt.org/z/iYJ4yJ (copy-paste EX-27)
https://godbolt.org/z/WquFzw (copy-paste EX-30...33)
https://godbolt.org/z/5rz1jdWhr (Variante mit `std::out_of_range`)
https://godbolt.org/z/XHtBLn (copy-paste EX-42...44)
https://godbolt.org/z/mdVmeY (copy-paste EX-42..43+45)
https://godbolt.org/z/gejU3B (copy-paste EX-42..43+46) - Als Ergänzung eigene Info-Grafiken:
https://tbfe.de/data/uploads/infographics/ExceptionBasics.png - https://tbfe.de/data/uploads/infographics/ExceptionDetails.png
- Alle Beispiele in kompilierbarer Form
- Kapitel "New Style Casts" (bis dynamic_cast)
DIENSTAG
- Kapitel "New Style Casts" (Rest)
- Kapitel "Lambda Functions"
- Kapitel "Dynamic Memory Management" (bis std::weak_ptr)
MITTWOCH
- Kapitel "Dynamic Memory Management" (Rest)
- ergänzt durch eigene Info-Grafik
https://tbfe.de/data/uploads/infographics/SmartPointers.png
- ergänzt durch eigene Info-Grafik
- Kapitel "STL: Container, Iterators, Algorithms"
- für weiteres Selbststudium siehe auch eigene Unterlagen
https://tbfe.de/wetrain/G/Cplusplus_STL_3days
- für weiteres Selbststudium siehe auch eigene Unterlagen
DONNERSTAG (innerhalb dieser Teile kann beliebig priorisiert werden)
- Kapitel "Generic Programming mit Templates"
- zusätzliches Beispiel zum "type trait" std::is_unsigned
und static_assert (Korrektheitsprüfung zur Compile-Zeit)
https://godbolt.org/z/P4n9Ehfv6 - Beispiel Metaprogrammierung (iterator_traits, decltype, type_traits, remove_reference und remove_const)
https://godbolt.org/z/6oMYGxjzs
- zusätzliches Beispiel zum "type trait" std::is_unsigned
- Kapitel "Multi-Threading und Synchronisation"
- ergänzt durch eigene Unterlagen für die Beispiele
"Thread-Safe RingBuffer" mit Condition-Variables
https://tbfe.de/wetrain/G/Cplusplus_Concurrency_Basics_2hours/#21
und "Lock-Free Algorithms" mit atomaren Operationen:
https://tbfe.de/wetrain/G/Cplusplus_Concurrency_Basics_2hours/#28
- ergänzt durch eigene Unterlagen für die Beispiele
- Kapitel "Idioms and Pitfalls"
- Kapitel "Regular Expressions" (evtl. als optionale Ergänzung)
- Ggf. bis dahin zurückgestellte Vertiefungen
Chess Clock Example (Step by Step):
Montag
- https://godbolt.org/z/Wo9Kddrvj Vorgabe für "Chess-Clock" (Schritte 1 bis 3)
Die TBDs sind hier in mehrere Schritte eingeteilt. Es gibt (kummulative) Musterlösungen für jeden dieser Schritte. Sie können diese ggf. auch als neuen Startpunkt verwenden, wenn Sie die Bearbeitung eines Schritts auslassen wollen. - https://godbolt.org/z/bs1v8TKqn Lösung zur "Chess-Clock" (Schritt 1)
enthalten ist auch eine Anregung für ein weiterer Ausbau-Vorschlag- https://godbolt.org/z/7jvdcxdco Lösung Ausbauvorschlag (`operator<<`)
- https://godbolt.org/z/coovKffYE erweiterte Lösung (einfaches TDD)
- https://godbolt.org/z/PcMfK4fPK Lösung zur "Chess-Clock" (Schritt 2)
Hinweis: Die vollständige Realisierung von Schritt 3 erfordert relativ viel "sytematische Arbeit". Insbesondere bei Zeitknappheit wird daher vorgeschlagen, statt diesen Schritt selbst zu erarbeiten die Unterschiede zwischen der Lösung von Schritt 2 und der Lösung von Schritt 3 in einer Diff-Ansicht "side by side" anzusehen und anhand dessen zu kontrollieren, ob der zugrundeliegende Anatz verstanden wurde,
- https://godbolt.org/z/Pec65GPfs Lösung zur "Chess-Clock" (Schritt 3)
enthalten ist auch ein Vorschlag zur Vereinfachung der Kontrollstrukturen- https://godbolt.org/z/1P9TE46WT Lösung zum Vereinfachungs-Vorschlag
- https://godbolt.org/z/eoenbfcGK Lösung zur "Chess-Clock" (Kommando-Hilfe)
Dienstag
- https://godbolt.org/z/jnxv36zf1 Vorgabe für Chess-Clock (Schritte 4 bis 7)
- https://godbolt.org/z/fTfM4foWo Lösung zur Chess-Clock (Schritt 4)
- https://godbolt.org/z/hqTfE61eG Lösung Seitenpfad (`__func__` vs. `__PRETTY_FUNCTION__`)
- https://godbolt.org/z/G8hPf54G3 Lösung zur Chess-Clock (Schritt 5)
- https://godbolt.org/z/YGE7sK4a9 Lösung zur Chess-Clock (Schritt 6+7)
Mittwoch
- https://godbolt.org/z/seP3KxE3E Vorgabe für Chess-Clock (Schritt 8)
- https://godbolt.org/z/o9ndnddds Lösung für Chess-Clock (Schritt 8)
- ... alternative Lösung gemäß "NullObject"-Pattern
- https://godbolt.org/z/PWPEqncGv Vorgabe für Chess-Clock (Schritt 9)
- https://godbolt.org/z/3EzofGbqW Lösung für Chess-Clock (Schritt 9)
- https://godbolt.org/z/9vs9TjEaq alternative Lösung OHNE protected
- https://godbolt.org/z/6nexj4x5P Vorgabe für Chess-Clock (Schritt 10)
- https://godbolt.org/z/o8WP78Eob Lösung für Chess-Clock (Schritt 10)
Einzuortierende Links
- Vorgabe für Step_09: https://godbolt.org/z/dfvqfa6P1
- Lösung für Step_09: https://godbolt.org/z/4zq55sxeh
- Vorgabe für Step_08: https://godbolt.org/z/dzYf4dv13
- Lösung für Step_08: https://godbolt.org/z/deMj9aK7h
- Variante mit `format` (C++20): https://godbolt.org/z/oPTb9or9G