相关疑难解决方法(0)

使用Supports()函数和通用接口类型

我刚刚尝试在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;
Run Code Online (Sandbox Code Playgroud)

和以下代码片段:

class procedure TFunctions.Test;
var
  myObject: TMyObject;
  myInterface: IMyInterface;
begin
  myObject := TMyObject.Create;

  myInterface := GetInterface<IMyInterface>(myObject);
end;
Run Code Online (Sandbox Code Playgroud)

我希望没有问题,但我得到以下编译时错误:

[DCC错误] GenericExample.pas(37):E2029'('预期但','找到[DCC错误] GenericExample.pas(37):E2014预期语句,但找到类型'T'的表达式

当用作函数的实际参数时,我不确定编译器期望我用T做什么.

我搜索了很多,并没有能够破解这个.我的一部分怀疑如果我能理解在编译期间接口名称如何转换为IID:TGUID类型,当使用具体的接口名称时,我可以取得一些进展,但这也避开了我.

任何帮助深表感谢.

delphi generics interface

10
推荐指数
1
解决办法
6722
查看次数

标签 统计

delphi ×1

generics ×1

interface ×1