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

时间:2013-04-01 00:36:24

标签: c++ arrays oop data-structures enums

以下是否有效:

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 个答案:

答案 0 :(得分: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 *?

在这个例子中,是的。

除非另有说明,否则enum中的第一个值可转换为0,而其他每个枚举的1大于enum之前的值{。}}。

答案 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.