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