Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 14:24
So: (OOP)
Delphi-Quellcode:
Type
  TSomeFunction = Function (A,B : TSomeType) : TSomeResult;
  TMetaFunction = Class
  Private
    fFunction : TSomeFunction;
  Public
    Constructor Create (aFunction : TSomeFunction);
    Function CallFunction (A,B : TSomeType) : TSomeResult;
  End;

Constructor TMetaFunction.Create(aFunction : TSomeFunction);
Begin
  fFunction := aFunction;
End;

Function TMetaFunction.CallFunction (A,B : TSomeType) : TSomeResult;
Begin
  Result := fFunction (A,B);
End;
...

  MyFunctions.Add('FooBarFunction', TMetaFunction.Create(@FooBar)); // Muss man nur beim Aufräumen aufpassen.

  MyResult := TMetaFunction(MyFunctions.Objects[MyFunctions.IndexOf('FooBarFunction')]).CallFunction(A,B);
Oder so (QAD):
Delphi-Quellcode:
Var
  FunctionNames : TStringList;
  FunctionPointer : TList;

Procedure AddFunction (aName : String; aFunction : TSomeFunction);
Begin
  FunctionNames.Add(aName);
  FunctionPointer.Add(aFunction);
End;

Function GetFunction (aName : String) : TSomeFunction;
Begin
  Result := TSomeFunction(FunctionPointer[FunctionName.IndexOf(aName)]);
End;
...
AddFunction ('FooBarFunction', @FooBar);
MyResult := GetFunction('FooBarFunction')(A,B);
@uligerhard: Wegen deiner komischen Bezeichner (Rein, Raus) verstehe ich deinen Code nicht. Machst du das immer so?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat