Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Generic Proc nutzen (https://www.delphipraxis.net/212942-generic-proc-nutzen.html)

Kostas 27. Apr 2023 10:59

AW: Generic Proc nutzen
 
Zitat:

Zitat von jaenicke (Beitrag 1521648)
Zitat:

Zitat von Kostas (Beitrag 1521645)
Leider nicht. Delphi meckert "Inkompatible Typen: System.Sysutils.TProc<TData> und Procedure of Object. "die Übergabe weil ich die Proc falsch angelegt habe. Deshalb der Versuch due Procedure zu typisieren.

Wenn du eine procedure of object hast, bist du immer noch in deiner Klasse drin. Das geht nicht. Du musst die Prozedur außerhalb deklarieren!

Interessant, ich habe die Procedure außerhalb der Klasse innerhalb der Unit verschoben.

Delphi-Quellcode:
procedure BeforeLoadProc<TData>(
  const Arg: TData);
begin
  //
end;
Damit ist Delphi auch nicht einverstanden: Typparameter bei globalen Proceduren oder Funktionen nicht zulässig.

jaenicke 27. Apr 2023 11:04

AW: Generic Proc nutzen
 
Wie AuronTLG schon schrieb musst du ohne Generics arbeiten. Die Signatur muss lediglich zu TProc<TData> passen:
Delphi-Quellcode:
Procedure BeforeLoadData(arg : TData);

Kostas 27. Apr 2023 11:33

AW: Generic Proc nutzen
 
Verflixt, geht auch nicht.

Die Procedure in der unit wird jetzt akzeptiert.
Delphi-Quellcode:
procedure BeforeLoadProc(
  const Arg: TData);
begin
  //
end;
Bei der Übergabe
Delphi-Quellcode:
LoadData(BeforeLoadProc);
bekomme ich jetzt die Meldung: Inkompatible Typen: System.Sysutils.TProc<TData> und Procedure.
Die aufrufende Procedure ist so definiert:
Delphi-Quellcode:
procedure LoadData(const BeforeLoad: TProc<TData> = nil)

himitsu 27. Apr 2023 12:05

AW: Generic Proc nutzen
 
prozedur-zeiger
Delphi-Quellcode:
TBeforeLoadProc<TData> = procedure(Arg: TData);

method- oder class-prozedur-zeiger
Delphi-Quellcode:
TBeforeLoadProc<TData> = procedure(Arg: TData) of object;


Erstes geht natürlich nur für reine Prozeduren oder statische Class-Proceduren,
aka procedure BeforeLoadData: TBeforeLoadProc<TData>;
oder class procedure {TYoureClass.}BeforeLoadData: TBeforeLoadProc<TData>; static;


Oder eben das Zweite ohne static.
also procedure {TYoureClass.}BeforeLoadData: TBeforeLoadProc<TData>;
oder class procedure {TYoureClass.}BeforeLoadData: TBeforeLoadProc<TData>;

Uwe Raabe 27. Apr 2023 12:57

AW: Generic Proc nutzen
 
TProc<T> erwartet einen Parameter ohne
Delphi-Quellcode:
const
!

Kostas 27. Apr 2023 13:47

AW: Generic Proc nutzen
 
Perfekt, genau so funktioniert es. ich muss
Delphi-Quellcode:
const
entfernen

Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz