在Delphi 2010中如何设置通用类型的前向声明?

前端之家收集整理的这篇文章主要介绍了在Delphi 2010中如何设置通用类型的前向声明?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我碰到一个似乎是一个非常古典的问题:一个项目和一个集合类,两个引用对象,需要一个前向声明.我正在使用更新5的Delphi 2010.

这对非通用类很好,但我无法解决E2086错误与泛型类型:

type
  // Forward declarations
  TMyElement = class; // E2086: Type 'TMyElement' is not yet completely defined

  TMyCollection<T:TMyElement> = class
    //
  end;

  TMyElement = class
    FParent: TMyCollection<TMyElement>;
  end;

切换类声明顺序时也会发生同样的问题.

我没有在这里或QualityCentral中找到任何这个问题的引用(E2086的其他问题被发现,但与这个用例无关)

我现在唯一的解决方法是将父对象声明为TObject,并在需要时将其转换为集合泛型类型(不是一个干净的解决方案…)

你是怎么解决这个问题的,还是转发你的泛型类呢?

谢谢,

[2011年10月22日修订] QualityCentral上的跟进:
我在here质量中心报告了这个错误

教统局最近已经封闭以下决议案:
分辨率:按设计
解决:16.0.4152

我只有Delphi 2010.有人可以确认它已经在Delphe XE2 Update1中修复,还是意味着它按照预期工作?

[编辑2011年10月23日] EMB最终答复:
EMB今天证实,使用通用类型的forward声明不支持实际的Delphi编译器.您可以通过上面提供的链接在QC中看到他们的答案.

解决方法

你可以通过声明一个祖先类来解决它:
type
  TBaseElement = class
  end;

  TMyCollection<T: TBaseElement> = class
  end;

  TMyElement = class(TBaseElement)
  private
    FParent: TMyCollection<TBaseElement>;
  end;

猜你在找的Delphi相关文章