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

时间:2015-11-12 20:20:54

标签: 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

然后CSet应该只包含名为的值eAeBeC

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

修改

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

1 个答案:

答案 0 :(得分:10)

对于没有指定值的枚举(如

),这很容易
Mail::send('emails.m_reservation', $data, function ($message) use ($data) {
        $message->subject($data['name']);
        $message->to('gmail_username@gmail.com');
        $message->from($data['email'], $data['name']);
    });

但是,将type TEnum = ( eA, eB, eC ); TSet = set of TEnum; const CSet: TSet = [eA..eC]; CSet: TSet = [low(TEnum)..high(TEnum)]; 定义为

TEnum
上面的

将无法按照您的预期运作。在您的情况下,type TEnum = ( eA = 1, eB = 5, eC = 34 ); 将包含低枚举值和高枚举值之间的所有数值(1到34)。

仅获取明确命名的CSet值的唯一方法是使用TEnum

这是Simple Types

中记载的设计