フラグに名前をつけて定義したらたまに間違う問題
この対応のための方法をいくつか考えていまして。
C++14から2進数での記述に対応したこともあって以下のような手法を最近使っています。
static const unsigned char FLAGID_HAGE = 0b1;
static const unsigned char FLAGID_HIGE = 0b10;
static const unsigned char FLAGID_HUGE = 0b100;
static const unsigned char FLAGID_HEGE = 0b1000;
static const unsigned char FLAGID_HOGE = 0b10000;
=の位置を揃えておけば斜面の滑らかさで変なところに気づけるという具合。
このやり方では間に何か挟もうとするとそれ以降の数値を全部書き換えないといけません。
というわけで次の方法を考えました。
#define Flag(x) flag_##x = 1 << x
enum
{
Hage = 0,
Hige,
Huge,
Hege,
Hoge
};
static const unsigned char Flag( Hage );
static const unsigned char Flag( Hige );
static const unsigned char Flag( Huge );
static const unsigned char Flag( Hege );
static const unsigned char Flag( Hoge );
マクロでユニークなビット定数のフラグを生成できます。
これだと定義を追うのが大変という問題が残ります...それに2回ずつHageなきゃいけない...
static const unsigned char
をマクロに含めてやるとスッキリしそうですな。
#define CreateFlag(x) static const unsigned char flag_##x = 1 << x
enum
{
Hage = 0,
Hige,
Huge,
Hege,
Hoge
};
CreateFlag( Hage );
CreateFlag( Hige );
CreateFlag( Huge );
CreateFlag( Hege );
CreateFlag( Hoge );
なんとか1回で済ませる術はないものか。