単一のヘッダー ファイル内にあり、依存関係のない、クリーンな構文を備えた反射型コンパイル時 enum ライブラリ。
C++11 では、コンパイル時にすべてを使用できます。列挙型を変換し、それらをループし、その最大値を見つけ、規則を静的に適用し、結果をテンプレート引数としてまたはconstexpr
関数に渡すことができます。すべてのリフレクションはメタプログラミングのニーズに利用できます。
インターフェイスは C++98 でも同じです。インターフェイスの大部分は実行時のみに使用する必要があります。このライブラリは、C++98 には組み込まれていない、スコープとサイズの列挙型を提供します。
完全なドキュメントについては、プロジェクト ページを参照してください。
enum.h
プロジェクトに追加するだけです。
iostream
含めるだけでコンパイラの速度が低下するためには、数十の列挙型を宣言する必要があります。最大の制限は、 BETTER_ENUM
マクロをクラス内で使用できないことです。これを取り除くのは難しいようです。 typedef
(または C++11 using
) を使用した回避策があります。
BETTER_ENUM (SomePrefix_Color, uint8_t , Red, Green, Blue)
struct triplet {
typedef SomePrefix_Color Color;
Color r, g, b;
};
triplet::Color color;
ただし、名前空間内でBETTER_ENUM
使用することはできます。
このマクロには、宣言された定数が 64 個というソフト制限があります。次の手順に従って拡張できます。最終的に、定数の数はコンパイラの最大マクロ引数数によって制限されます。
場合によっては、 Channel::Red
などの定数の前に+
を付けて、明示的にChannel
型に昇格させる必要があります。たとえば、比較を行う場合:
channel == +Channel::Red
msvc では、 switch
ケースの網羅性チェックを行うために、警告 C4062 を有効にする必要がある場合があります。
ライブラリのオリジナル バージョンは、 BETTER_ENUM
と呼ばれる古いジェネレータの代替として、2012 年から 2013 年の冬に Hudson River Trading で著者によって開発されました。