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.