AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeiger als Parameter eines generischen Typs, TRecordList
Thema durchsuchen
Ansicht
Themen-Optionen

Zeiger als Parameter eines generischen Typs, TRecordList

Ein Thema von Panthrax · begonnen am 30. Mär 2009 · letzter Beitrag vom 2. Apr 2009
Antwort Antwort
Panthrax

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

Re: Zeiger als Parameter eines generischen Typs, TRecordList

  Alt 2. Apr 2009, 15: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz