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

sinamics2020-09

Begleitseite zum Kurs

SINAMICS Advanced C++

2020-09-22 – 2020-09-24

Link zu Schulungs-Unterlagen

Weitere Online-Compiler:

Link zu Live-Demos und Übungen:

  • Berichtigte Lösung zu NVI: https://godbolt.org/z/j3ebYc
    • in dem in den Schulungsunterlagen verlinkten Beispiel war der Aufruf von `Overflowed` in `Count` vergessen worden​
  • Erweiterte Lösung mit NVI: https://godbolt.org/z/zsz5o9
    • zusätzliche aber ungenutzte Erweiterungspunkte;
    • Problematik "vorsorglich eingebrachter (aber meist ungenutzter) Erweiterungspunkte, die zu unnötigen Unterprogramm-verszweigungen über die VMT führen. In der Schulung wurde am dritten Tag das "CRTP"-Muster vorgestellt, aber nicht mehr auf diese Klasse angewendet. Hier ist nun das Ergebnis:
    • https://godbolt.org/z/hvdEfx
  • Einige Experimente mit Initializer-Listen: https://godbolt.org/z/dxe9dv
    • NICHT: "Member-Initialization-Lists", die sind etwas anderes!)
    • zusätzlich zur vorbereiteten Version wurde am Ende die Verwendung einer Iniltializer-List von Werten eines Aufzählungstyps gezeigt, um eine Schleife über alle diese Werte zu steuern.
  • Hier wurde ein wenigt mit den Mehrdeutigkeiten bei der Übergabel von Initializer-Listen zur Erstellung eines `std::vector<int>` gespielt: https://godbolt.org/z/dxKoqM
    • Es ging darum zu zeigen, dass der Wechsel von von runden auf geschweifte Klammern die Bedeutung ändert, wenn nur ein einziger Wert enthalten ist (= Mehrdeutigkeit zwischen Anzahl der Elemente, die dann mit `0` initialisiert werden sowie einer Liste bestehend aus einem Element, das dann zur Initialisierung verwendet wird. Leider ist im obigem Link nicht mehr viel davon zu sehen, deshalb wurde das Beispiel nach Ende des Kurses nochmal neu aufbereitet, siehe folgender Link: https://godbolt.org/z/x4fxrq
  • Hier nochmal eine "down-sized" Variante des `LimitCounter`/`ChainedCounter`-Beispiels, welche lediglich eine Klasse mit einem Zeiger auf die nächste Zählstufe enthält:
    • https://godbolt.org/z/hjWEn7
    • Das Verhältnis von "Aufwand zu Ergebnis" erscheint hier angemessener, die frühere Variante sollte vor allem NVI illustrieren). Zwar enthalten nun auch die abschließenden Zählstufen jeweils einen Zeiger, dafür könnte aber der VMT-Zeiger entfallen, da `Count` und `Reset` nicht mehr `virtual` sein müssen.
  • Einführende Live-Demo zu `constexpr` für Daten und Funktionen: https://godbolt.org/z/WPEs4x
  • Einführung der Klasse `MyArrayOfInt_10` (die später in eine Template umgewandelt wird): https://godbolt.org/z/dnG9vG
    • (Im Kern ging es hier eher darum, ein realistisches Beispiel für `static_assert`, `decltype` und "Type Traits" sowie `const_cast` zu zeigen.)
  • Beispiel für die Auflösung einer Mehrdeutigkeit für die Verwendung von ` nullptr` an Stelle von `NULL` bei einer Funktionsüberladung für `int` und `const char*`, aber dass diese bei zwei Pointer-Überladungen auch nichts mehr nutzt: https://godbolt.org/z/1EEh7h
  • Anwendung von `=default` auf das bereits begonnene `MyArrayOfInt_10`-Beispiel, um zu verdeutlichen welche automatisch implementierten Funktionen auch erwünscht sind: https://godbolt.org/z/Yrq1Yq
  • Umwandlung von Obigem in eine Template mit dem neuen Namen `MyArray`: https://godbolt.org/z/da3oj9
  • Ersatz der zur Compilezeit (via Template) festgelegten Größe durch ein Constructor-Argment:
    • https://godbolt.org/z/P7x1x8
    • Eine Folge davon ist, dass der Speicherplatz nun auf dem Heapt angelegt wird und Objekte ohne weitere Maßnahmen nicht mehr kopierbar sind, weshalb einer der automatisch genereirten Standard-Operationen mit `=delete` nun gesperrt werden.
  • Weiterführung des Beispiels mit selbst implementierten Move- und Copy-Konstruktoren und Zuweisung:  https://godbolt.org/z/TPh5jK
  • Live-Demo zu `std::shared_ptr`: https://godbolt.org/z/MGKKb7
  • `using` Typ-Aliase für Templates: https://godbolt.org/z/a8686s
  • Einfache Templates als "sichere Funktions-Schnittstelle für C-Arrays): https://godbolt.org/z/acYWGn
  • Aufgabe zur Template Meta-Programmierung: https://godbolt.org/z/7YffPz
  • Lösung zu Obigem: https://godbolt.org/z/6c8M3P (noch nicht ganz vollständig)
  • Multi-File Beispiele zur expliziten Template-Instanziierung: https://onlinegdb.com/rydGab5Sv
  • Grundlegender Ansatz von CRTP: https://godbolt.org/z/GWr4Yz

Extra-Links: