Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Typeinfo als Parameter

  Alt 6. Nov 2013, 12:39
In diesem Projekt wird sehr viel mit records gearbeitet.
Diese enthalten Shortstrings (z.B. String[40]).
Solche Records werden dann in Memory und/oder Filestreams abgelegt.

Um von den Ansistrings wegzukommen probiere ich mehrere Möglichkeiten.
Das Problem haben wir auch. Finde ich schwach vom Emba, dass sie keinen UnicodeString[N] eingebaut haben. Das wäre für den Compilerbauer IMNSHO um einiges leichter zu implementieren gewesen und mit besserem Ergebnis als eine drangefrickelte Lösung von dir oder mir.

Das bedeutet aber, dass für jede vorhandene Stringlänge ein eigener Datentyp declariert werden muss.

String[22] -> Fixstring22
String[40] -> Fixstring40
String[128] -> Fixstring 128 ...
Macht doch nix - dass lässt sich doch mit Suchen und Ersetzen gut lösen.

Zitat:
FixStringXX
So weit war ich auch schon, aber leider sind da auch die Generics zu nix zu gebrauchen.
Und aus irgendwelchen Gründen wehren sich Alle gegen die Einführung von Makros, bzw. daß man Konstanten als "Parameter" in den Generics verwenden kann.
Delphi-Quellcode:
TFixString<Len> = record
  Value: array[0..Len-1] of Char;
  class operator implicit(const aValue: string): TFixString;
  class operator implicit(const aValue: TFixString): string;
end;
Da vermisse ich mal wieder C++ und Templates. Was in Delphi halbwegs als Ersatz geht, ist statt direkt der Größe einen Typ passender Größe zu übergeben:
Delphi-Quellcode:
TFixString<TMitPassenderLaenge: record> = record
  Value: array[0..SizeOf(TMitPassenderLaenge)-1] of Char; // Achtung: SizeOf liefert gelegentlich 0
  // oder
  Value: array[0..1] of TMitPassenderLaenge; // danach fleißig casten. :-(
end;
und
Delphi-Quellcode:
Str40 = string[40];
FixString40 = TFixString<Str40>;
oder
Delphi-Quellcode:
Arr40 = Array[0..39] of AnsiChar;
FixString40 = TFixString<Arr40>;
Nicht elegant, aber besser als nix.
Uli Gerhardt

Geändert von uligerhardt ( 6. Nov 2013 um 12:43 Uhr)
  Mit Zitat antworten Zitat