Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Arbeiten mit überladenen Operatoren

  Alt 18. Dez 2019, 07:24
Seit ich mich nun etwas eingehender mit überladenen Operatoren auseinander gesetzt habe, denke ich dass Delphi ein kleines Sprachfeature fehlt: Die Möglichkeit, Operatoren in record helpers überladen zu können. Dadurch könnte man auch Standard-Typen innerhalb einer Unit neue Fähigkeiten beibringen. Ein Beispiel:
Delphi-Quellcode:
type
  TStringHelper = record helper for string
  public
    class operator In(A: string; B: TStringDynArray): Boolean;
  end;

implementation

class operator TStringHelper.In(A: string; B: TStringDynArray): Boolean;
var
  S: string;
begin
  Result := False;
  for S in B do begin
    if SameStr(A, S) then begin
      Result := True;
      Break;
    end;
  end;
end;

procedure Beispiel;
var
  LString: string;
begin
  LString := 'Foo';
  if LString in ['Foo', 'Bar'] then begin
    // Machwas
  end;
end;
Aktuell winkt der Compiler bei diesem Code mit einem Fehler ab: "E2123 PROCEDURE, FUNCTION, PROPERTY oder VAR erwartet"

Bisher muss man ja für sowas erst umständlich einen Record-Typen definieren, dem dann per class operator Implicit eine Kompatibilität zu einem String beibringen und dann auch noch prozedurbezogen mit diesem alternativen Stringtyp arbeiten.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (18. Dez 2019 um 07:54 Uhr)
  Mit Zitat antworten Zitat