使用枚举可以访问数组吗?

3
以下内容是否可行:

以下内容是否可行:

enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava}

ID2D1Bitmap* pBmpTile[TileBmp];

这会创建一个大小为9的数组,其中任何元素都可以使用其编号或名称访问吗?例如,pBmpTile [3] 和 pBmpTile [Snow] 是否都指向相同的ID2D1Bitmap*?

我现在无法尝试,直到一段时间后才能尝试。否则,我会自己尝试。

如果这行不通,是否有更清晰的替代方案:

ID2D1Bitmap* pBmpTile[9]

ID2D1Bitmap* pBmpMask, pBmpGrass, pBmpSand, pBmpSnow, pBmpSwamp, pBmpPaved, pBmpRock, pBmpSavannah, pBmpLava;

?

2个回答

8

TileBmp是一种类型,而你的数组声明期望的是一个数字,而不是一种类型。

这将起作用,因为单个enum值可以转换为整数。

enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava, TILEBMP_COUNT};

ID2D1Bitmap* pBmpTile[TILEBMP_COUNT];

pBmpTile[3] 和 pBmpTile[Snow] 是否都指向同一ID2D1Bitmap*?

在这个例子中,是的。

除非另有规定,枚举中的第一个值可转换为 0,并且每个其他枚举都比前一个枚举大 1。


1
ID2D1Bitmap* pBmpTile[TileBmp];

无法使用。枚举名称不是主表达式,不能用作数组大小。

但是,您可以使用枚举字段访问数组元素,因为枚举字段映射到整数。例如:

  enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava};
  int A[10] = {0,1,2,3,4,5,6,7,8,9};
  std::cout << A[Sand]; //it will print 2 in this case.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接