在delphi

时间:2018-03-21 20:47:13

标签: delphi generics interface delphi-10-seattle

我正在与第三方图书馆合作。其中一个组件使用的结构具有从TInterfacedObject继承的通用基类。它们作为普通类从该泛型下降,提供必要的类型。如果我尝试在implements中使用该类,那么我会得到F2084 Internal Error: AV0AE194EC-R00000000-0编译器错误。

以下是一些要粘贴到控制台应用程序中的示例代码。

uses
  System.SysUtils,
  System.Classes;

type
  ITestIntf = Interface
    ['{78910A8A-0FE0-473F-A199-3CD10BFC6295}']
    procedure DoSomething;
  end;

  // The generic base class
  TGenericBase<T: TComponent> = class(TInterfacedObject)
  private
    FObject: T;
  public
    constructor Create(AObject: T); virtual;
  end;

  TMyComponent = class(TComponent)
  end;

  // The descendant class that implements our interface
  TAdapter = class(TGenericBase<TMyComponent>, ITestIntf)
  public
    procedure DoSomething;
  end;

  TProxyObject = class(TInterfacedObject, ITestIntf)
  strict private
    FMyAdapter: TAdapter;
  public
    property MyAdapter: TAdapter read FMyAdapter implements ITestIntf;
  end;

constructor TGenericBase<T>.Create(AObject: T);
begin
  inherited Create;
  FObject := AObject;
end;

procedure TAdapter.DoSomething;
begin
  // Not really doing anything
end;

我猜这是编译器的一个错误。如果我将基类更改为继承自TInterfacedObject的简单类,则代码编译良好。错误发生在32位和64位编译器中。

这是编译错误吗?

0 个答案:

没有答案