列挙型の要素数

列挙型を割り当てない場合、次のようなことができます:

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

NumberOfTypes は、実際の型の数である 3 に評価されます。


あるとは思いません。しかし、それらが連続したものではなく、どこかにそれらのリストをまだ持っていない場合、そのような番号をどうしますか?そして、それらが連続しているが異なる番号で始まる場合は、いつでも行うことができます:

enum blah {
    FIRST = 128,
    SECOND,
    THIRD,
    END
};
const int blah_count = END - FIRST;

古い質問、私は知っています。これは、同じ質問を持つ Google 社員向けです。

X-マクロを使用できます

例:

//The values are defined via a map which calls a given macro which is defined later
#define ENUM_MAP(X) \
      X(VALA, 0)    \
      X(VALB, 10)   \
      X(VALC, 20)

//Using the map for the enum decl
#define X(n, v) [n] = v,
typedef enum val_list {
    ENUM_MAP(X) //results in [VALA] = 0, etc...
} val_list;
#undef X

//For the count of values
#define X(n, v) + 1
int val_list_count = 0 + ENUM_MAP(X); //evaluates to 0 + 1 + 1 + 1
#undef X

これは IDE に対しても透過的であるため、オートコンプリートは正常に機能します (すべてプリプロセッサで行われるため)。