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.