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?