Wenn man keine Rücksicht auf Abwärtskompatibilität legen muss, dann kann man alles in eine normale anonyme Methode packen:
Delphi-Quellcode:
TAnonWrapper = class
class function Wrap<T>( AProc: TProc<T>; Arg: T ) : TProc;
class function Wrap<T,TResult>( AFunc: TFunc<T,TResult>; Arg: T ) : TFunc<TResult>;
// das kann man jetzt mit beliebig vielen Argumenten weiterspinnen
end;
class function TAnonWrapper.Wrap<T>( AProc: TProc<T>; Arg: T ) : TProc;
begin
Result :=
procedure ()
begin
AProc( Arg );
end;
end;
class function TAnonWrapper.Wrap<T,TResult>( AFunc: TFunc<T,TResult>; Arg: T ) : TFunc<TResult>;
begin
Result :=
function(): TResult
begin
Result := AFunc( Arg );
end;
end;
Man kann sich also das gesamte Interface-Implementierungs-Boilerplate-Geraffel komplett sparen und alles euf einen gemeinsamen Typen herunterbrechen.
Und wenn ich nur noch eins implementieren muss, dann ist das halt weniger.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)