我刚刚尝试在Delphi 2009中首次使用泛型,并且对如何使用泛型类型作为Supports函数的输入感到困惑,该函数用于查看对象是否实现了给定的接口.我已经创建了一个小样本来说明问题.
给出以下类型和效用函数:
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;
和以下代码段:
class procedure TFunctions.Test; var myObject: TMyObject; myInterface: IMyInterface; begin myObject := TMyObject.Create; myInterface := GetInterface<IMyInterface>(myObject); end;
我希望没有问题,但我得到以下编译时错误:
[DCC Error] GenericExample.pas(37): E2029 ‘(‘ expected but ‘,’ found
[DCC Error] GenericExample.pas(37): E2014 Statement expected,but expression of type ‘T’ found
当用作函数的实际参数时,我不确定编译器期望我用T做什么.
我搜索了很多,并没有能够破解这一个.我的一部分怀疑如果我能理解在编译期间接口名称如何转换为IID:TGUID类型,当使用具体的接口名称时,我可以取得一些进展,但这也避开了我.
任何帮助深表感谢.