我不能将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
与查找表中的元素之间的链接。
是否有一种简单的方法将两者链接在一起,所以当一个更改另一个更新时也是如此?
只是略有不同:
type
TFutureCore = 0..15;
TFutureCoreSet = set of TFutureCore;
TFutureCoreIndex = 0..(2 shl High(TFutureCore)) - 1;
TLookupTable = record
FData: array[TFutureCoreIndex] of TSomeRecord;
end;
使用a的另一个好处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.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句