delphi – 如何在泛型类中声明枚举类型的集合类型

我在Delphi XE4中遇到了一些奇怪的行为.

我不能在泛型类中声明一个set类型,其中序数类型在同一个类中声明.

例如:

TTest<T> = class(TObject)
type
  TEnumType  = (eOne, eTwo, eThree);
  TEnumTypes = set of TEnumType;
end;

以上不编译.编译器发出错误“E2001:Ordinal type required”.

一个非泛型的类

TTest = class(TObject)
type
  TEnumType  = (eOne, eTwo, eThree);
  TEnumTypes = set of TEnumType;
end;

编译.

要使泛型类成功编译,必须在类外声明序数类型:

TEnumType  = (eOne, eTwo, eThree);
TTest<T> = class(TObject)
type
  TEnumTypes = set of TEnumType;
end;

>这种行为是否被视为错误?如果是,是否已在更高版本中修复?
>有没有人有另一种解决方法?我想在类中声明类型,因为它们仅在此类的私有部分中使用.

最佳答案
从查看问题跟踪器看,它似乎是围绕XE3 / XE4的回归,它在以后的版本中得到修复:

> http://qc.embarcadero.com/wc/qcmain.aspx?d=126675
> http://qc.embarcadero.com/wc/qcmain.aspx?d=112682
> http://qc.embarcadero.com/wc/qcmain.aspx?d=117200

转载注明原文:delphi – 如何在泛型类中声明枚举类型的集合类型 - 代码日志