Sign in Join
Wiki copytemporary

Revision 1 of 1, by Mathias on 1-23-2018. The page as it is now.

Type Helper/de

Zurück zu den reservierten Wörtern.\

=Type Helper= Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.
Die Funktion Type Helper wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. String.Split
Type Helper steht erst ab FPC 3.0 zu Verfügung.

Beispiel

Der Vektor wird um folgende Funktionen erweitert

Man sieht, ein Type-Helper ist eine sehr mächtige Funktion. Dieses Beispiel hier ist für OpenGL eine grosse Hilfe.

pascal
program Project1;

{$modeswitch typehelpers}                      // "Type Helper" aktivieren.

type
  TVector2f = array[0..1] of Single;           // Ein einfacher Vektor.

  // Type-Helper für TVector2f.
  TVector2fHelper = Type Helper for TVector2f  // Schlüssel "Type Helper" verwenden.
  private
    function GetX: Single;                     // Getter für Y 
    procedure SetX(AValue: Single);            // Setter für X
  public
    property x: Single read GetX write SetX;   // Property für X
    procedure Scale(x, y: Single);             // Die Erweiterungs-Funktion.
  end;

function TVector2fHelper.GetX: Single; inline;
begin
  Result := Self[0];
end;

procedure TVector2fHelper.SetX(AValue: Single); inline;
begin
  Self[0] := AValue;
end;

procedure TVector2fHelper.Scale(x, y: Single); inline;
begin
  Self[0] *= x;
  Self[1] *= y;
end;

// Hauptprogramm
var
  vec: TVector2f;      // Variable normal definieren.
begin
  vec[0] := 1.5;
  vec[1] := 2.5;

  vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen.

  WriteLn('X: ', vec[0]:10:5);
  WriteLn('Y: ', vec[1]:10:5);
  WriteLn;
  vec.x := vec.x + 1.0;
  WriteLn('X: ', vec[0]:10:5);
end.

Ausgabe:

pascal
X:  3.00000
Y:  7.50000

X:  4.00000

Siehe auch

Autor: Mathias


From the Free Pascal wiki, page "Type Helper/de", as it stood on 2018-01-23 after a change by Mathias, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.