我在网上找到了这个泛型类的定义:
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数据类型。我现在的问题是:
如果我的用例不需要任何assigend数据类型T,那么如果我可以跳过数据类型的规范,那将更好/合乎逻辑。我失败了:
A := TVertex<>.Create();
A.Name := 'A';
为避免在创建过程中切换数据类型而进行的任何更改???
答案 0 :(得分:4)
你明确要求的是一个明显的缺陷。编译器将如何处理此声明?
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
的方法都可以在非泛型类中实现。