Nee, leider gibt es keine Möglichkeit, um bei den Generics Nummern zu übergeben.
Und wenn man den Speicher als String[x]
oder als array[0..x] of Char
übergibt, dann kann man nicht mehr innerhalb des Generischen Typs darauf zugreifen, um die nötigen konvertierungen für die operatoren hinzubekommen.
Ich hatte irgendwann mal sowas wie
Delphi-Quellcode:
FixedSizeUnicodeString<BaseT> = record
public
const cBaseSize = SizeOf(BaseT);
strict private
FBuffer: array[0..Pred(cBaseSize)] of WideChar;
end;
, was sich zumindest compilieren ließ.
Aber leider war cBaseSize immer 0, egal, welchen Typ man übergeben hat. Experimente mit constraints (z.B.
FixedSizeUnicodeString<BaseT: record>
) haben das - WIMRE - behoben, sich aber nie für BaseT = string[N] compilieren lassen.
Von der Sprache/Syntax her wäre es schon möglich den Generigs etwas von Makros mitzugeben oder eben, daß man nicht nur Typen, sondern auch Werte (Nummern oder Strings) als "Parameter" an den Generic übergibt ... aber ob Emba jemals sowas Cooles in die Generics einbaut? (wäre immerhin ein Pluspunkt gegenüber den anderen Programmiersprachen, welche Generics kennen)
Manchmal vermisse ich echt C++.
Der Einzige Ausweg blieb halt nur noch ein "blödes" Template, über welches man sich zumindestens passende Typen basteln könnte.
Da wir string[N] nur für eine Handvoll unterschiedliche N's brauchen, könnte ich mich ja mit etwas Copy&Paste arrangieren. Vielleicht kann man auch mit
twm's Pseudo-Templates was tricksen.