Dipl.-Ing. Martin Weitzel, 64380 Roßdorf bei Darmstadt

cppfor2022W18

Literaturhinweise zu Design-Patterns

  • https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
    • C++ spezifisch ausgrichtet
  • https://en.wikipedia.org/wiki/Design_Patterns
    • immer noch sehr gut, da "das Original"
    • aber nicht immer der "beste Weg" in Bezug auf C++ (es erschien zu einer Zeit, in der C++ Templates noch kein "Standard" in den Compilern waren) 

C++ FOR 2022 Kalenderwoche 


Links zu kompilierbaren Beispielen:



EINSCHUB: Die verschiedenen Nutzungsformen von C++-Templates
UND AUCH: Operator-Overloading / Typ-Umwandlungen (Best Practices)

  • Parametrisierung von "Typen" und (Compilezeit-) "Konstanten"
    • auch bekannt als "generic programming"
    • an Beispielen relativ leicht zu erklären
      •  
  • Meta-Programmierung
    • Templates sind eine vollständige "Funktionale Programmiersprache"
    • dafür gibt es einige nützliche "kochrezeptartige" Formen der Nutzung
      • (Stichwort: "type traits")
    • ein tieferes Verständnis dafür zu schaffen, wie diese Dinge implementiert sind, erfordert aber deutlich mehr Zeit als in diesem Kurs zur Verfügung steht
      • (und ist oft unnötig: "shift complexity from the many to the few")


Einschub als Praxis-Bezug zum Kapitel 5:

*: Im Hinblick auf die klare Heraushebung Unterschiede empfiehlt sich die Verwendung eines Tools, das übersichtliche "Side-by-Side"-Vergeiche von Source erlaubt (wie es z.B. auch in VSCode und Eclipse integriert ist).

Als kurze Zusammenfassung hier nur, dass die Registry (immer noch) auf dem in der Lösung Exercise 3 verwendeten fest dimensionierten C-Array basiert, welches nun den Element-Typs `std::function void(std::ostream&)` hat.

  • Beim `Attach` wird eine `CallbackID` zurückgeliefert …
  • … welche ggf. aufbewahrt werden sollte …
  • … um später ein Eintrag wieder zu löschen.

 STL in Beispielen:


*: Hier wird Problematik behandelt, dass die gegenwärtige Implementierung des `ObserverContainer`-s nicht sicher gegen konkurrierende Aufrufe ist, beispielsweise wenn neue Observer registriert werden während die `Notify`-Schleife läuft.

Sammlung weiterer Beispiele mit "Compiler Explorer":