使用在类正在实现的泛型接口中的泛型类中声明的嵌套类型

时间:2013-09-07 19:30:39

标签: delphi generics nested generic-interface

我有一个类似于List的类tMyList<B>,它带有一个方法Each(),它迭代每个元素并使用参数调用匿名过程tMyList<A>.enumProc - 类型为<B>的当前项。 我希望将该类实现为一个接口,以便更轻松地进行生命周期管理。

问题是我无法在iMyList<A>接口中声明每个方法,因为tMyList<A>.enumProc类型未知。据我所知,Interfaces不支持嵌套类型?

以下是代码:

  tMyList<B> = class;

  iMyList<A> = interface
    procedure each(enumProcedure: iMyList<A>.enumProc); // ERROR - Undeclared identifier: 'enumProc'
  end;

  tMyList<B> = class(tInterfacedObject, iMyList<B>)
    type
      enumProc = reference to procedure(item: iMyList<B>);
    public
      procedure each(enumProcedure: enumProc);
  end;

* 在此特定情况下,实施枚举器不是一个选项

1 个答案:

答案 0 :(得分:3)

使这项工作成功的唯一方法是在实现类之外定义过程类型。像这样:

type
  IMyIntf<A> = interface;

  TMyProc<A> = reference to procedure(Intf: IMyIntf<A>);

  IMyIntf<A> = interface
    procedure Foo(Proc: TMyProc<A>);
  end;

  TMyClass<A> = class(TInterfacedObject, IMyIntf<A>)
    procedure Foo(Proc: TMyProc<A>);
  end;