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

时间:2016-10-26 08:40:40

标签: delphi generics delphi-xe4

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

我无法在泛型类中声明set类型,其中序数类型在同一个类中声明。

例如:

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

以上不编译。编译器发出错误&#34; E2001:需要序数类型&#34;。

非通用类,如

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

2 个答案:

答案 0 :(得分:5)

这确实是在以后的版本中修复的错误。例如,您的代码在XE7中编译。很可能它会在XE5或XE6中编译,但是我没有立即让他们检查。

答案 1 :(得分:4)

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