Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktionen hinterlegen (wie Events) (https://www.delphipraxis.net/64376-funktionen-hinterlegen-wie-events.html)

glkgereon 2. Mär 2006 19:32


Funktionen hinterlegen (wie Events)
 
Hi...

Ich habe einige Funktionen mit exakt gleichen Parameterlisten. (konkret geht es um einen Mathe-Parser^^)

zur einfacheren Überprüfung habe ich mir folgendes System überlegt:
Ich hinterlege zu jedem Operator die Funktion, tue das dann in einen Array und muss dann nur noch alles durchgehen, mir das richtige raussuchen und die funktion aufrufen.

konkret sähe das dann in etwa so aus:

Delphi-Quellcode:
type
  TProcTwoValOperation = function (Val1, Val2: Extended): Extended;

  TTwoValOp = record
    Proc: TProcTwoValOperation;
    Name: String;
  end;

function Plus: TProcTwoValOperation;

const
  cTwoValOperations: array [1..1] of TTwoValOp = (
    (Proc: Plus; Name: '+')
  );

implementation

function Plus(Val1, Val2: Extended): Extended;
begin
  Result:=Val1+Val2;
end;

function Rechne(Op: String; Params: array of Extended): Extended;
var i:Integer;
begin
  if Length(Params)=2 then
  for i:=Low(cTwoValOperations) to High(cTwoValOperations) do
    if cTwoValOperations[i].Name=Op then
      begin
      Result:=cTwoValOperations[i].Proc(Params[0],Params[1]);
      Break;
      end;
end;
nur leider motzt er dann bei der Deklaration der Konstanten, Plus wäre ein Extended und kein TProcTwoValOperation. :(

wie muss das richtig gehen?
geht es so überhaupt?

Niko 2. Mär 2006 19:46

Re: Funktionen hinterlegen (wie Events)
 
Hi,

statt
Delphi-Quellcode:
function Plus: TProcTwoValOperation;
sollte es
Delphi-Quellcode:
TProcTwoValOperation = function (Val1, Val2: Extended): Extended;
heißen.

glkgereon 2. Mär 2006 19:47

Re: Funktionen hinterlegen (wie Events)
 
Zitat:

Zitat von Niko
Hi,

statt
Delphi-Quellcode:
function Plus: TProcTwoValOperation;
sollte es
Delphi-Quellcode:
TProcTwoValOperation = function (Val1, Val2: Extended): Extended;
heißen.

das steht ja oben...

aber ich muss dann ja Plus als so eine Funktion deklarieren....

Niko 3. Mär 2006 10:45

Re: Funktionen hinterlegen (wie Events)
 
Zitat:

Zitat von Gereon
das steht ja oben...

Hoppla, hab versehentlich die falsche Zeile hingeschrieben. Es muss
Delphi-Quellcode:
function Plus(Val1, Val2: Extended): Extended;
heißen, also genau so, wie deine Funktion auch im implementation Abschnitt definiert ist.
Was du deklariert hast ist eine Funktion, die keine Parameter hat und einen Rückgabewert vom Typ TProcTwoValOperation zurückliefert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.

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