位字段
集合经常用来定义过程的 标示 。这比定义必须或在一起的整数常量清晰并且类型安全。
枚举、集合和强转可以一起用:
- type
- MyFlag* {.size: sizeof(cint).} = enum
- A
- B
- C
- D
- MyFlags = set[MyFlag]
- proc toNum(f: MyFlags): int = cast[cint](f)
- proc toFlags(v: int): MyFlags = cast[MyFlags](v)
- assert toNum({}) == 0
- assert toNum({A}) == 1
- assert toNum({D}) == 8
- assert toNum({A, C}) == 5
- assert toFlags(0) == {}
- assert toFlags(7) == {A, B, C}
注意集合如何把枚举变成2的指数。
如果和C一起使用枚举和集合,使用distinct cint。
为了和C互通见 bitsize pragma 。