是否可以使用枚举访问数组

Is it possible to use an enum to have access to an array?

本文关键字:访问 数组 枚举 可以使 是否      更新时间:2023-10-16

以下操作是否有效:

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;

TileBmp类型,并且您的数组声明需要数字而不是

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

enum TileBmp {Mask, Grass, Sand, Snow, Swamp, Paved, Rock, Savannah, Lava, TILEBMP_COUNT};
ID2D1Bitmap* pBmpTile[TILEBMP_COUNT];

pBmpTile[3]和pBmpTile[Snow]是否都引用相同的ID2D1Bitmap*?

在这个例子中,是的。

除非另有规定,否则enum中的第一个值可转换为0,其他每个枚举的1都大于它之前的enum

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.