位字段

集合经常用来定义过程的 标示 。这比定义必须或在一起的整数常量清晰并且类型安全。

枚举、集合和强转可以一起用:

  1. type
  2. MyFlag* {.size: sizeof(cint).} = enum
  3. A
  4. B
  5. C
  6. D
  7. MyFlags = set[MyFlag]
  8.  
  9. proc toNum(f: MyFlags): int = cast[cint](f)
  10. proc toFlags(v: int): MyFlags = cast[MyFlags](v)
  11.  
  12. assert toNum({}) == 0
  13. assert toNum({A}) == 1
  14. assert toNum({D}) == 8
  15. assert toNum({A, C}) == 5
  16. assert toFlags(0) == {}
  17. assert toFlags(7) == {A, B, C}

注意集合如何把枚举变成2的指数。

如果和C一起使用枚举和集合,使用distinct cint。

为了和C互通见 bitsize pragma