我不能使用set
类型作为数组的大小指示器,但是对于小集合这样做是完全合理的。
假设我有以下代码:
TFutureCoreSet = set of 0..15;
TLookupTable = record
FData: array[TFutureCoreSet] of TSomeRecord; //error ordinal type required
....
以下代码编译并运行。
TFutureCoreSet = set of 0..15;
TLookupTable = record
FData: array[word] of TSomeRecord;
然而,这打破了TFutureCoreSet
中允许的状态数与查找表中的元素之间的链接
是否有一种简单的方法可以将两者联系起来,以便在更改其他更新时也是如此?
答案 0 :(得分:12)
只是略有不同:
type
TFutureCore = 0..15;
TFutureCoreSet = set of TFutureCore;
TFutureCoreIndex = 0..(2 shl High(TFutureCore)) - 1;
TLookupTable = record
FData: array[TFutureCoreIndex] of TSomeRecord;
end;
使用TFutureCoreIndex
的另一个好处是,您可以使用它将TFutureCoreSet
类型转换为序数类型。在对类型进行类型转换时,必须强制转换为相同大小的序数类型。
AllowedStates = LookupTable.FData[TFutureCoreIndex(FutureCores)]; //works
AllowedStates = LookupTable.FData[Integer(FutureCores)]; //invalid typecast
AllowedStates = LookupTable.FData[Word(FutureCores)]; //works, but not type safe.