Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Zeiger als Parameter eines generischen Typs, TRecordList

  Alt 2. Apr 2009, 16:46
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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat