私の C++03 コンポーネントの 1 つで、enum からグローバル const int に移行しています。enum{ RED=0, GREEN, BLUE };
に変更されますconst unsigned int RED = 0, GREEN = 1, BLUE = 2;
問題は、グローバル const 変数の場合です。各値を明示的に初期化する必要があります。ex値が100の列挙型を使用すると、値を順番に保持するのはかなり困難です。この列挙型の途中から値を削除したいと想像してください。これは大きな混乱です (つまり、列挙型を削除した後にすべての列挙値の値を変更します)!
この回避策を作成しましたが、異なるコンパイラやターゲットで結果が保証されるかどうかはわかりません。
#define CREATE_GLOBAL_COUNT(name, val) static unsigned int g_counter_##name = val
#define INC_GLOBAL_COUNT(name) g_counter_##name ++
CREATE_GLOBAL_COUNT(color, 0);
const int RED = INC_GLOBAL_COUNT(color),
GREEN = INC_GLOBAL_COUNT(color),
BLUE = INC_GLOBAL_COUNT(color);
編集:主な動機は、ヘッダー ファイル間の依存関係を減らすことです。列挙型を使用する必要があるコンポーネントには、enum_definition.h ファイルを含める必要があります。新しいソリューションでは、グローバル変数を外部化して使用するだけです。