m5knt

底が浅い男がなんとはなしに...

BOOST_PP_BOOL が 256 までにょろ

プリプロセッサの常套手段としてルックアップテーブル的な実装で何でもこなしちゃうってのはまあ分かるんですが 有限なのはちょいと困るので 0 false !n true になるようなものを考えてみました

力技ならこんな感じ

#define BOOL(x) BOOL ## x
#define BOOL0 0
#define BOOL1 1
// #define BOOLx 1

マクロ定義がマッチすればカンマを増やして 2 個目の引数で答えを返すようにしてやります

#define BOOL(x) BOOL1_(JOIN2(BOOL0_, x), 1, -1)
#define BOOL0_0 -1, 0
#define BOOL1_(...) EXPAND(BOOL2_(__VA_ARGS__))
#define BOOL2_(x, y, ...) y

#define JOIN2(x, y) JOIN2_(x, y)
#define JOIN2_(x, y) x ## y

#define EXPAND(...) EXPAND_(__VA_ARGS__) 
#define EXPAND_(...) __VA_ARGS__

負の数はたぶんマクロでがんばれないのでまあこんな感じなところですかね~

参考 http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor