Jeg har denne generic method i min form:
TYPE TForEach<T> = REFERENCE TO FUNCTION(Component : T) : BOOLEAN;
PROCEDURE ForEach<T:TComponent>(Event : TForEach<T>);
samt denne implementation:
PROCEDURE TForm203.ForEach<T>(Event : TForEach<T>);
BEGIN
FOR VAR I:=0 TO PRED(ComponentCount) DO
IF Components[I] IS T THEN
IF NOT Event(T(Components[I])) THEN BREAK
END;
og det kompilerer fint. Men når jeg så prøver at bruge den:
procedure TForm203.FormCreate(Sender: TObject);
begin
ForEach(FUNCTION(Button : TButton) : BOOLEAN
BEGIN
Result:=TRUE
END)
end;
så får jeg en - for mig - uforståelig fejl: [dcc32 Error] Main.pas(46): E2010 Incompatible types: 'TForm203.TForEach<T>' and 'Procedure'
Hvor får den "procedure" fra???
Det virker, hvis jeg laver en eksplicit type i mit kald:
procedure TForm203.FormCreate(Sender: TObject);
begin
ForEach<TButton>(FUNCTION(Button : TButton) : BOOLEAN
BEGIN
Result:=TRUE
END)
end;
Men hele fidusen var jo at benytte "type inference" - jeg har jo specificeret typen i min anonyme function, så det burde være unødvendigt...
Nogen ide (andet end "sådan er det bare" :-))
Keld R. Hansen