2015-11-12 124 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

相關問題