我正在将一个集类型和一个数字编码到一个(32位)Tag属性中。从标签中检索集合非常简单:TDaySet(Byte((tag and $ff000000) shr 24))
。但是,如何设置包含此编码集信息的常量?
const
FRED_SCHEDULE = ID_FRED or (Byte([Monday, Wednesday]) shl 24);
这不编译。实际错误是“无效的类型转换”但我认为根本问题是我正在尝试从类型化常量初始化非类型常量。
有没有人有更好的主意?
答案 0 :(得分:3)
嗯,首先[Monday, Wednesday]
不是类型常量。它不是类型化常量,因为您没有声明类型。输入的常量是
const
Days: TSetOfDays = [Monday, Wednesday];
但是,如你所知,你不能从类型常量中得到一个真正的常数。并且您不能指望编译器知道如何解释表达式中的[Monday, Wednesday]
,因为您没有声明类型。
因此,您不能使用set notation声明一个真常量,因为如果指定集合的类型,则只能使用set notation。这意味着你试图做的事情可能不太现实。我的意思是,你可以这样写:
const
FRED_SCHEDULE = ID_FRED
or ((1 shl ord(Monday) or 1 shl ord(Wednesday)) shl 24);
但这样做会很疯狂。