gpt4 book ai didi

delphi - 按需跳过通用参数

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

我在网上找到了通用类的定义:

  TVertex<T> = class
public
Name: String;
OutputAttributes: TVertexOutputAttributes;
Marker: Boolean;
Data: T; // User-defined data attribute
function HasAdditionalAttributes: Boolean;
constructor Create();
procedure Mark;
procedure UnMark;
end;


使用以下代码行创建TVertex类的单个实例:

  A := TVertex<Integer>.Create();
A.Name := 'A';


在此示例中,我们将T定义为Integer数据类型。我的问题现在是这样的:

如果我的用例不需要任何关联数据类型T,那么如果我可以跳过有关数据类型的规范,那将更好/逻辑。我失败了:

   A := TVertex<>.Create();
A.Name := 'A';


为了避免在创建过程中移交数据类型的任何更改?

最佳答案

您明确要求的内容有一个明显的缺陷。编译器将使用此声明做什么?

Data: T; // User-defined data attribute


如果您不提供 T,则编译器将不知道该怎么做。

这种观察使我们找到了一种可能的方法。如果您不想提供 T,那么大概您不希望类包含此成员。如果未提供其类型,如何包含该成员?因此,定义一个非通用版本:

type
TVertex = class
public
Name: String;
OutputAttributes: TVertexOutputAttributes;
Marker: Boolean;
end;


然后从此派生通用版本:

type
TVertex<T> = class(TVertex)
public
Data: T; // User-defined data attribute
end;


显然,您将需要确定应在哪个类中声明和实现方法。显然,任何不依赖 Data的方法都可以在非泛型类中实现。

关于delphi - 按需跳过通用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269109/

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