- 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);
}
)
うむ、あまり嬉しくない
しかし、型情報を引数で受け取るのはあっち方面な感じがする