Was für eine Unit muss ich einbinden.
Als Muster habe ich syshelph.inc genommen, das es aber eine inc ist, kann ich die Uses nicht finden.
Code: Alles auswählen
type
TStringHelper = Type Helper for AnsiString
end;
Code: Alles auswählen
type
TStringHelper = Type Helper for AnsiString
end;
Code: Alles auswählen
{$modeswitch typehelpers}
theo hat geschrieben:Code: Alles auswählen
{$modeswitch typehelpers}
Steht eig. hier http://wiki.freepascal.org/FPC_New_Feat ... pe_helpers
Code: Alles auswählen
type
TIntHelper = Type Helper for Integer
public
procedure Add;
end;
procedure TIntHelper.Add;
begin
self += 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
i:=1;
i.Add;
ShowMessage(IntToStr(i));
end;
Code: Alles auswählen
type
TVector = array[0..2] of Single;
TVectorHelper = Type Helper for TVector
public
procedure Add;
end;
procedure TVectorHelper.Add;
begin
self[0] += 1.0;
self[1] += 1.0;
self[2] += 1.0;
end;
{ TIntHelper }
procedure TIntHelper.Add;
begin
self += 1;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
v:TVector;
begin
i:=1;
i.Add; // Ohne Probleme.
ShowMessage(IntToStr(i));
v.Add; // Da kommt der Fehler.
end;
Mathias hat geschrieben:Ich habe denen eine Mail geschrieben, ich hoffe Google hat gut übersetzt.
Mathias hat geschrieben:Habe ich das richtig verstanden, ich sollte einen Bug-Tracker erstellen ?
http://lists.freepascal.org/pipermail/f ... hread.html
Code: Alles auswählen
type
TVector0 = array[0..2] of Single; // Fehler bei v.Add. "unit1.pas(67,5) Error: Illegal qualifier"
TVector1 = array of Single; // geht
TVector2 = record // Fehler bei public, "unit1.pas(44,3) Error: Type "TVector2" cannot be extended by a type helper"
a, b, c:single;
end;
TVector3 = array of TVector0; // geht
TVector4 = string; // geht
TVector5 = TButton; // Fehler bei public, "unit1.pas(45,3) Error: Type "TButton" cannot be extended by a type helper"
TVector6 = array of TButton; // geht
TVector = TVector1;
{ TVectorHelper }
TVectorHelper = Type Helper for TVector
public
procedure Add;
end;
implementation
{$R *.lfm}
{ TVectorHelper }
procedure TVectorHelper.Add;
begin
self[0] += 1.1;
self[1] += 1.1;
self[2] += 1.1;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
v:TVector;
begin
SetLength(v, 3);
v.Add;
ShowMessage(FloatToStr(v[0]));
end;
Code: Alles auswählen
type
TVector = array[0..2] of Single;
TVectorHelper = Type Helper for TVector
public
procedure Add;
end;
procedure TVectorHelper.Add;
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
var
v:TVector;
begin
v.Add; // "unit1.pas(53,5) Error: Illegal qualifier"
end;