Sign in Join
Wiki copytemporary

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.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.