KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I just tried my first use of generics in Delphi 2009 and am perplexed on how to use a generic type as the input to the Supports function used to see if an object implements a given interface. I've created a small sample illustrating the problem. Given the following types and utility function: IMyInterface = interface ['{60F37191-5B95-45BC-8C14-76633826889E}'] end; TMyObject = class(TInterfacedObject, IMyInterface) end; class function TFunctions.GetInterface<T>(myObject: TObject): T; var specificInterface: T; begin // This would compile, but looses the generic capability //Supports(myObject, IMyInterface, specificInterface); // This results in compile errors Supports(myObject, T, specificInterface); result := specificInterface; end; and the following code snippet: class procedure TFunctions.Test; var myObject: TMyObject; myInterface: IMyInterface; begin myObject := TMyObject.Create; myInterface := GetInterface<IMyInterface>(myObject); end; I would expect no problems but I get the following compile time errors: [DCC Error] GenericExample.pas(37): E2029 '(' expected but ',' found [DCC Error] GenericExample.pas(37): E2014 Statement expected, but expression of type 'T' found I'm not sure what the compiler is expecting me to do with the T when used as the actual argument to the function. I've searched around quite a bit and haven't been able to crack this one. A part of me suspects that if I could understand how an interface name gets converted to the IID: TGUID type during compilation, when using a concrete interface name, I could make some headway, but that has evaded me also. Any help is much appreciated.
Tags (comma-separated)
Save Edits
Cancel