2015-11-12 129 views
4

有没有一种方法来创建在编译时的一组(或固定时间运行时)一组用含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

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


编辑

有明确声明时,我没有意识到枚举类型的行为,非连续值。枚举仍然包含未命名的成员来弥补差距。更新问题只适用于名为成员

+0

的CSet:TSET = EA,EB,EC]要求 –

+0

@ user246408它包括那些元素,即使它们没有被命名?例如你是说'TSet'包含了序数值为17的元素? – ardnew

+0

哦,谢谢,将我的问题改为只适用于指定成员是否太晚了? :( – ardnew

回答

10

这是很容易为那些没有像

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

const 
    CSet: TSet = [eA..eC]; 
    CSet: TSet = [low(TEnum)..high(TEnum)]; 

指定的值然而枚举,定义为

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

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

只得到TEnum您已明确命名值的唯一方法是通过使用CSet: TSet = [eA, eB, eC];

这是设计记录在Simple Types

相关问题