Ok, ich denke, so etwas müsste die Lösung sein:
Delphi-Quellcode:
type
TRecordList<T: record> = class
type
TRecPtr = ^T;
{ ... }
end;
Vielen Dank für den Hinweis! An diese Möglichkeit hatte ich nicht gedacht.
Leider funktioniert das aber nicht (Quelltext siehe unten):
Zitat von
Compiler (Delphi 2009, Update 1 und 2):
[DCC Fataler Fehler] RecordList.pas(72): F2084 Interner Fehler: AV21B654E9-R00000000-0
Der Compilerlauf ist fehlerfrei, wenn GetItem und SetItem nicht deklariert sind. Überhaupt, es scheint mir es leicht zu sein, den Compiler zum Absturz zu bringen. Tja, was tun?
Delphi-Quellcode:
unit RecordList;
interface
uses
Classes;
type
TRecordList<T> =
class
public
type
TRecPtr = ^T;
strict private
FList: TList;
strict protected
property List: TList
read FList;
function GetItem(
const Index: Integer): TRecPtr;
function GetRecordSize: Integer;
procedure SetItem(
const Index: Integer;
const Value: TRecPtr);
public
// property Items[const Index: Integer]: TRecPtr read GetItem write SetItem; default;
property RecordSize: Integer
read GetRecordSize;
constructor Create;
destructor Destroy;
override;
end;
TMyRecord =
record
{ ... }
end;
PMyRecord = ^TMyRecord;
TMyRecordList = TRecordList<PMyRecord>;
implementation
{ TRecordList<T> }
constructor TRecordList<T>.Create;
begin
inherited Create;
FList:=TList.Create;
end;
destructor TRecordList<T>.Destroy;
begin
List.Free;
inherited;
end;
function TRecordList<T>.GetItem(
const Index: Integer): TRecPtr;
begin
// Result := List[Index];
end;
function TRecordList<T>.GetRecordSize: Integer;
begin
Result := SizeOf(T);
end;
procedure TRecordList<T>.SetItem(
const Index: Integer;
const Value: TRecPtr);
begin
// List[Index] := Value;
end;
end.