gpt4 book ai didi

delphi - 如何在Delphi 2010下设置泛型类型的前向声明?

转载 作者:行者123 更新时间:2023-12-03 14:37:07 25 4
gpt4 key购买 nike

我遇到了一个似乎非常经典的问题:一个项目和一个集合类,两者都互相引用,需要前向声明。我正在使用带有更新 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报告了这个错误

EMB 最近已关闭此问题,解决状态如下:分辨率:按设计在构建中解决:16.0.4152

我只有 Delphi 2010。有人可以确认它已在 Delphe XE2 Update1 中修复吗?或者这是否意味着它可以“按预期”工作?

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

最佳答案

您可以通过声明祖先类来解决这个问题:

type
TBaseElement = class
end;

TMyCollection<T: TBaseElement> = class
end;

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

关于delphi - 如何在Delphi 2010下设置泛型类型的前向声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6055742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com