Uforståelig fejlbesked - compiler fejl?

4 views
Skip to first unread message

HeartWare

unread,
Aug 21, 2025, 8:17:58 AMAug 21
to DAPUG
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
Reply all
Reply to author
Forward
0 new messages