KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Is it possible to pass interface's method as parameters? I'm trying something like this: interface type TMoveProc = procedure of object; // also tested with TMoveProc = procedure; // procedure of interface is not working ;) ISomeInterface = interface procedure Pred; procedure Next; end; TSomeObject = class(TObject) public procedure Move(MoveProc: TMoveProc); end; implementation procedure TSomeObject.Move(MoveProc: TMoveProc); begin while True do begin // Some common code that works for both procedures MoveProc; // More code... end; end; procedure Usage; var o: TSomeObject; i: ISomeInterface; begin o := TSomeObject.Create; i := GetSomeInterface; o.Move(i.Next); // somewhere else: o.Move(i.Prev); // tested with o.Move(@i.Next), @@... with no luck o.Free; end; But it is not working because: E2010 Incompatible types: 'TMoveProc' and 'procedure, untyped pointer or untyped parameter' Of course I can do private method for each call, but that is ugly. Is there any better way? Delphi 2006 Edit: I know that I can pass whole interface, but then I have to specify which function use. I don't want two exactly same procedures with one different call. I can use second parameter, but that is ugly too. type SomeInterfaceMethod = (siPred, siNext) procedure Move(SomeInt: ISomeInterface; Direction: SomeInterfaceMethod) begin case Direction of: siPred: SomeInt.Pred; siNext: SomeInt.Next end; end; Thanks all for help and ideas. Clean solution (for my Delphi 2006) is Diego's Visitor. Now I'm using simple ("ugly") wrapper (my own, same solution by TOndrej and Aikislave). But true answer is "there is no (direct) way to pass interface's methods as parameters without some kind of provider.
Tags (comma-separated)
Save Edits
Cancel