创建一个包含每个成员的集合

ard*_*new 4 delphi

有没有办法在编译时(或运行时的常量时间)创建一个具有序数类型成员的集合,T其中包含每个命名值T?

换句话说,我怎么能补充特定类型的空集?

type 
  TEnum = 
  ( 
    eA = 1,
    eB = 5,
    eC = 34 
  );
  TSet = set of TEnum;

const
  CSet: TSet = ~[]; // with ~ being my fictional set complement operator
Run Code Online (Sandbox Code Playgroud)

那么CSet应该只包含命名的值eA,eB和eC.

当然这不是一个实际的问题,我只是好奇


编辑

当使用显式的非连续值声明时,我没有意识到枚举类型的行为.枚举仍包含未命名的成员以填补空白.更新的问题仅适用于指定成员

Dal*_*kar 10

对于没有指定值的枚举,这很容易

type 
  TEnum = 
  ( 
    eA,
    eB,
    eC 
  );
  TSet = set of TEnum;

const
  CSet: TSet = [eA..eC];
  CSet: TSet = [low(TEnum)..high(TEnum)];
Run Code Online (Sandbox Code Playgroud)

但是,TEnum定义为

type 
  TEnum = 
  ( 
    eA = 1,
    eB = 5,
    eC = 34 
  );
Run Code Online (Sandbox Code Playgroud)

以上将无法按照您的预期运作.在您的情况下,CSet将包含低和高枚举值之间的所有数值(1到34).

获取TEnum您已明确命名的值的唯一方法是使用CSet: TSet = [eA, eB, eC];

这是设计,如简单类型中所述