memo

ちょっとしたメモ書き(個別表示)

Cのマクロ : (2005/10/26)
ApacheのAPRライブラリの関数は、基本的にタイプが面倒
Boost/lambdaのfor_eachっぽいマクロを定義して、ちょっとでも楽をしようと思う

#define FOREACH(ITEM_TYPE, ITEM, ARRAY, EXP) \
{ ITEM_TYPE ITEM;\
while(!apr_is_empty_array( ARRAY )) { \
ITEM = *(( ITEM_TYPE *)apr_array_pop( ARRAY )); \
EXP \
} \
}

上記のようなマクロを定義した場合

int item;
while(!apr_is_empty_array(list)) {
item = *((int *)apr_array_pop(list));
if(item > 15){
apr_file_printf(local_stdout, "%d :)\n", item);
}else{
apr_file_printf(local_stdout, "%d :/\n", item);
}
}

上記のようなコードが以下のように書ける

FOREACH(int, item, list,
if(item > 15){
apr_file_printf(local_stdout, "%d :)\n", item);
}else{
apr_file_printf(local_stdout, "%d :/\n", item);
}
)


うむ、あまり嬉しくない
しかし、型情報を引数で受け取るのはあっち方面な感じがする

: back