generics

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
OlimilO
Beiträge: 7
Registriert: Fr 3. Sep 2010, 15:39

generics

Beitrag von OlimilO »

Hallo,
bin neu hier im Forum und in FPC sowieso. ich versuche mich mal darin die generics zu verstehen.
die generischen Listen sind ja in der Unit fgl und man erkennt darin auch die zu verwendende Syntax.
meine instalölierte Version ist:
Version # : 0.9.29
Datum : 2010-10-17
FPC-Version : 2.4.3
SVN-Revision : 27722

Meine ersten Versuche:
in einer Unit Unit2 eine Klasse

Code: Alles auswählen

type
  generic TMyPoint<T> = class(TObject)
  private
    FX: T;
    FY: T;
    function get_X: T;
    function get_Y: T;
    procedure set_X(value: T);
    procedure set_Y(value: T);
  public
    constructor Create; overload;
    constructor Create(x: T; y: T); overload;
    property X: Double read get_X write set_X;
    property Y: Double read get_Y write set_Y;
    function ToStr: String;
  end;
constructor TMyPoint.Create;
begin
  inherited Create;
end;
constructor TMyPoint.Create(x: T; y: T);
begin
  self.FX := x; self.FY := y;
end;
 
function TMyPoint.get_X: T;
begin
  result := self.FX;
end;
procedure TMyPoint.set_X(value: T);
begin
  self.FX := value;
end;
 
function TMyPoint.get_Y: T;
begin
  result := self.FY;
end;
procedure TMyPoint.set_Y(value: T);
begin
  self.FY := value;
end;
function TMyPoint.ToStr: String;
var
  extX: Extended;
  extY: Extended;
begin
  extX := Extended(self.FX);
  extY := Extended(self.FY);
  result := 'TMyPoint{' + FloatTostr(extX) + '; ' + FloatTostr(extY) + '}';
end;
in Unit1

Code: Alles auswählen

uses ... fgl;
...
procedure TForm1.Button1Click(Sender: TObject);
type
  TMyPointDbl     = specialize TMyPoint<Double>;
  TMyPointDblList = specialize TFPGList<TMyPointDbl>; //Syntax error ";" expected but ">" found
var
  i: Integer;
  p: TMyPointDbl;
  l: TMyPointDblList;
begin
  l := TMyPointDblList.Create;
  for i := 0 to 9 do begin
    p := TMyPointDbl.Create(1.2 + i, 3.4 + i);
    //l.Add(p);
  end;
  //p := TMyPointDbl(l[0]);
  MsgBox(p.ToStr);
  for p in l do begin
    p := TMyPoint(pp);
    MsgBox(p.ToStr);
  end;
end;
Aber das funzt nicht mit obiger Fehlermeldung beim Versuch die Liste zu spezalisieren.

kann mir jemand helfen?
braucht man eine neuere FPC-Version?

vielen dank im voraus
OlimilO

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6811
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: generics

Beitrag von af0815 »

Nach den Artikel hier FPC-Referenz dürften Listen, Array etc. noch nicht gehen.
Ev. ist das hier auch als info interessant.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

OlimilO
Beiträge: 7
Registriert: Fr 3. Sep 2010, 15:39

Re: generics

Beitrag von OlimilO »

Hallo af0815
Danke für die Info und die Links.

Code: Alles auswählen

var dblArr: Array of Double; 
var dblList: List of Double;  // <-- wäre schön!!!
blöd dass sie sich nicht an die of-Syntax des arrays angelehnt haben.
Man muss extra vorher einen spezialisierten Typ deklarieren.
Das ist zwar im Grunde ne saubere Lösung, find ich aber trotzdem irgendwie umständlich.

gruß
OlimilO

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6811
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: generics

Beitrag von af0815 »

Im FPC 2.5.1 ist die Fehlermeldung dieselbe - dh. kein Unterschied in der Version.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

OlimilO
Beiträge: 7
Registriert: Fr 3. Sep 2010, 15:39

Re: generics

Beitrag von OlimilO »

ah, OK Danke!

Antworten