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;

?

4

2 に答える 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* を参照しますか?

この例では、はい。

特に指定のない限り、 の最初の値enumは変換可能0で、他のすべての列挙はその前1の値より大きくなります。enum

于 2013-04-01T00:40:47.273 に答える
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.
于 2013-04-01T00:41:42.627 に答える