![]() |
Funktionen in Array
Hallo,
ich habe ein Programm geschrieben, welche mittels einer Case Anweisung nach und nach verschiedene Funktionen ausführt. In der Case Schleife wurde der Wert immer um eins erhöht und so wurde die nächste Funktion ausgeführt. Nun muss ich das Programm erweitern, wo teilweise andere Funktionen nötig sind und die Reihenfolge kann auch anders sein. Ich hatte mir das so gedacht, dass ich verschiedene Arrays habe, wo u.a. die Funktionen deklariert sind. Dann steppe ich durch das ganzze Array durch. Bei der neuen Version fülle ich dann das Array mit anderen Funktionen und anderer Reihenfolge. Habt ihr da einen Tipp? Ich hoffe, dass ist ein wenig verständlich. Hier ein wenig Code:
Delphi-Quellcode:
case Sequence of
tCreate : res := SiCreate; tWait4Start : res := SiWait4Start; tGetMaschine : res := SiGetMaschine; tTempPfadDel : res := SiTempPfadDel; |
AW: Funktionen in Array
Deine Idee kann man so formulieren:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; function A: Integer; begin Result := 1; end; function B: Integer; begin Result := 2; end; function C: Integer; begin Result := 3; end; function D: Integer; begin Result := 4; end; type TMyFunction = function: Integer; var Steps: array of TMyFunction; Step: Integer; res: Integer; begin SetLength(Steps, 4); Steps[0] := A; Steps[1] := B; Steps[2] := C; Steps[3] := D; for Step := 0 to High(Steps) do res := Steps[Step]; end. |
AW: Funktionen in Array
Fehlt da nicht ein
Delphi-Quellcode:
?
of object
|
AW: Funktionen in Array
Zitat:
|
AW: Funktionen in Array
Danke, das werde ich dieser Tage mal probieren.
Sieht aber so aus, dass ich es nutzen kann. |
AW: Funktionen in Array
Die Statemachine mit Funktionen, s.u., ist dafür zu gebrauchen,
oder besser gleich eine State-Machine-Klasse, z.B. ![]() |
AW: Funktionen in Array
Wo siehst du hier States? Für mich riecht das eher nach "pipes and filters".
Das von samso scheint mir als erstes der richtige Ansatz zu sein. |
AW: Funktionen in Array
Ich habe nun die Idee von Samso übernommen, aber festgestellt, dass ich durch Erweiterungen des Programms nun auch Parameter an die Funktionen übergeben muss.
Delphi-Quellcode:
function A(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean;
begin Result := True; end; function B(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean; begin Result := True; end; type TMyFunction = function(var x1: String; x2: integer; x3: String; x4: String; var x5: String): Boolean; var Steps: array of TMyFunction; Step: Integer; res: Integer; begin SetLength(Steps, 2); Steps[0] := A; <-- wie muss ich die Funktion hier schreiben, da sie Parameter hat? Steps[1] := B; for Step := 0 to High(Steps) do res := Steps[Step]; end. |
AW: Funktionen in Array
Zitat:
Delphi-Quellcode:
for Step := 0 to High(Steps) do
res := Steps[Step](x1,x2,x3,x4,x5); |
AW: Funktionen in Array
Danke Thomas,
im Beispiel oben (Konsolenprogramm) und den Infos von dir geht es, in meiner Umgebung bekomme ich den Fehler E2009: Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger'. Ich muss mal sehen, was in meinem Programm anders ist, als im Beispielprojekt. Irgendwie hängt das mit den Funktionen zusammen, da diese noch im private Abschnitt deklariert sind, weil das alles im einem Thread läuft und ich Synchronize benutzen muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz