Thema: generic cast?

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: generic cast?

  Alt 28. Feb 2012, 13:53
Das ist ein großes Problemchen der Generics.
Sowas ist einfach nicht möglich.

Die Generics werden am Anfang geparst, wo auch schon gewissen Prüfungen vorgenommen werden und da zu diesem Zeitpunkt noch keine genauen Typen feststehen, kann hier auch kein derartiger Cast damit aufgebaut werden.

Wenn die Typen bitkompatibel sind, dann gäbe es einen Weg (über Pointer), aber da dort dann kein "automatisch" Typecast genutzt werden kann, wie z.B. AnsiString<>WideString oder Byte<>Integer, würde ich von soeiner Funktion abraten, da dieses die Speicherverqaltung schnell mal zerschießen kann.
Oder man implementiert alle Konverter und Kopieroperationen selber, welche dann über die TypeInfo (RTTI) verwaltet und entsprechend ausgeführt werden müßten.

Wenn dir derartige Casts ausreichen und du noch etwas Zeit hast dann hätte ich womöglich was für dich.
Delphi-Quellcode:
  T<TType> = record
    class function ToStr (const Value: TType): string;
    class function FromStr(const Value: string): TType;

    class function ToInt (const Value: TType): Integer;
    class function FromInt(const Value: Integer): TType;

    class function ToBin (const Value: TType): Binary; // array of byte
    class function FromBin(const Value: Binary): TType;

    class function ToHex (const Value: TType): string;
    class function FromHex(const Value: string): TType;
  end;
PS: Das wird intern fast alles über TValue aus der Unit RTTI gehandhabt.
Vielleicht bis übernächstes Wochenende, da ich Dieses wohl noch zu tun hab.
Die To-Funktionen sind schon seit 3 Wochen fertig, mit allen Grundtypen wie Integer, String, Enum und Set, aber beim Rest hing ich etwas, da es nicht nativ über TValue möglich ist, und dann war was Anderes dazwischengekommen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Feb 2012 um 13:58 Uhr)
  Mit Zitat antworten Zitat