Jain, das ist fast möglich, oder kann Delphi inzwischen doch schon generischen Prozeduren?
Und wenn nicht, dann solltest du im Profil, oder nächstes Mal im Post, mit angeben, für welchen Compiler du etwas suchst.
Aber wenn du deine Funktion in eine Klasse verlagerst, wo es auch eine Klassenmethode sein kann, welche als Static im Kompilat praktisch genauso auferufen wird, wie eine entsprechende "normale" Funktion, dann ginge es.
Wieso eigentlich Offset?
OK, zum nil wäre es ein Offset, aber im Prinzip gibst du doch direkt deine Adresse an.
Delphi-Quellcode:
class function TMyClass.GetMem<T>(Addr: Pointer): T; // Nja, oder zumindestens auch nochmal mit NativeUInt überladen.
type
PT = ^T; // oder als public/private type direkt oben in der Klassendefinition
begin
Result := PT(Offset)^;
end;
// geht eventuell auch "direkt"
class function TMyClass.GetMem<T>(Addr: Pointer): T;
begin
Result := T(Offset^);
end;
Nur wozu soll das Ganze gut sein?
Ohne z.B. auch noch eine Typ-Konvertierung (ala Byte zu Integer oder String), ist das doch etwas "umständlich"?
Also im Gegensatz zum direkten Cast?
Vorallem ohne "inline" sind hier nun unnötige Codesprünge und bei Typen womöglich auch noch unnötige Speicheroperationen. (Referenzzählung von String und Interface, oder gar komplette Kopien, wie z.B. beim WideString)
Delphi-Quellcode:
i := PInteger($123456)^;
i := {TMyClass.}GetMem<Integer>($123456);