gpt4 book ai didi

delphi - 如何创建一个可以容纳不同类型对象的列表?

转载 作者:行者123 更新时间:2023-12-03 15:42:10 25 4
gpt4 key购买 nike

我目前使用的是这样的通用列表:

List: TList<TPoint>;

我希望 List 能够作为替代方案保存具有三个坐标的点:

type 
TPoint3D = record
x, y, z: Integer;
end;

我想声明如下:

List: TList<TCanBeEitherTPointOrTPoint3D>;

这当然行不通,但我不知道什么行得通!

最佳答案

Delphi 不支持异构类型的列表。您必须能够用单一类型表示所有潜在值。一种方法是将所有不同类型连接到一个可区分的联合中:

type
TPointUnion = record
case NumDimensions: Integer of
2: (p2: TPoint);
3: (p3: TPoint3D);
end;

然后你可以声明该类型的列表:

var
List: TList<TPointUnion>;

您可以将 TPointUnion 类型的值添加到列表中。要构造该类型的值,只需分配 NumDimensions 字段,然后分配相应的 p2p3 字段。读取此类值时,请检查 NumDimensions 字段以发现哪个点字段包含有效值。实际上,p2 始终可以安全使用,因为它的字段与 p3 的相应字段重叠。

关于delphi - 如何创建一个可以容纳不同类型对象的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15665900/

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