Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
22. Dez 2017
Er will doch die Konvertierung in den Record einbauen, und Low auf T geht nunmal nicht.
In Delphi generics geht leider das meiste nicht elegant, weils nunmal keine C++ Templates sind, denen das herzlich egal wäre,
wenn aus der Menge aller im Universum möglichen Typen für T welche nicht mit Ord funktionieren, solang du nur solche nutzt, bei denen das geht.
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
22. Dez 2017
Leider bisschen runtime overhead.
Wenn du genau weißt, dass dein T nur von den 6 System Typen ist und nicht von irgendwelchen Redeklarationen a la type TColumnIndex = type Integer dann kannst du auch das hier schreiben - TypeInfo vergleiche werden seit XE7 zur Compilezeit aufgelöst (kannst auch beides kombinieren so, dass du schnell bist, wenns Integer, Byte etc ist und wenn nicht auf die...
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
22. Dez 2017
function TMyRec<T>.ToDouble: Double;
begin
case GetTypeData(TypeInfo(t)).OrdType of
otSByte: Result := PShortInt(@v)^;
otUByte: Result := PByte(@v)^;
otSWord: Result := PSmallInt(@v)^;
otUWord: Result := PByte(@v)^;
otSLong: Result := PInteger(@v)^;
otULong: Result := PCardinal(@v)^;
end;