Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.611 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Statisch Array in der abgeleiteten Klasse verändern?

  Alt 11. Okt 2018, 12:25
Ich denke das es mit Generika auch gehen müsste, zumindest in C++ geht es.
Jap, mit den C++ Templates funktioniert sowas wunderschön, weil Diese den Code der resultierenden Klasse intelligent für die Typen erzeugen, die mindestens einmal als Template-Argument verwendet wurden. So wird beim Deklarieren von MyClass<std::string> und MyClass<std::uint32_t> einmal das Gerüst für std::string und einmal das Gerüst für std::uint32_t erzeugt. Oder wie deinem Falle würde auch MyClass<4> bzw. MyClass<8> zwei verschiedene Klassen erzeugen. Das sorgt natürlich für etwas größere Kompilate, eliminiert dafür aber sämtlichen runtime-overhead.

1. Problem:
Delphi erlaubt keine const-Expressions als Argument für Generics.

2. Problem:
Die Delphi Generics sind "dumm", unvollständig und in keiner Weise vergleichbar mit den funktionalen C++ Templates.

Delphi generiert für eine generische Klasse den Code nur einmalig. In Kombination damit, dass man keine gescheiten Constraints angeben kann, sorgt das für teils irrsinnige Konstrukte mit 1000 Pointer-Casts und Typechecks, damit der Compiler nicht wegen inkompatibler Typen meckert. Die Typechecks sind zwar teilweise mitlerweile Intrinsics und unbenutzte Fälle werden tatsächlich auch nicht mehr ins Kompilat aufgenommen, aber dennoch hat man nach wie vor runtime-overhead und zudem ist die Programmierung einer echten generischen Methode in der Regel eine Sisyphus-Aufgabe.

Deshalb: Vergiss es mit den Generics
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat