C言語 クロージャマクロの読み方
#include <stdio.h>
#define APPLY(type, closure, arg) (type)(&(closure), arg)
#define APPLY_COUNTER(c, a) APPLY (((int (*)(Counter *, int))((c).func)), c, a) // <=
#define MAKE_COUNTER(k) {k, counter_function};
typedef struct{
int n;
void* func;
}Counter;
int counter_function (Counter * c, int a){
return c->n += a;
}
int main (void){
Counter c1 = MAKE_COUNTER (0);
Counter c2 = MAKE_COUNTER (5);
printf ("%d\n", APPLY_COUNTER (c1, 3)); /* => 3 */
printf ("%d\n", APPLY_COUNTER (c2, 1)); /* => 6 */
printf ("%d\n", APPLY_COUNTER (c1, 2)); /* => 5 */
printf ("%d\n", APPLY_COUNTER (c1, 8)); /* => 13 */
printf ("%d\n", APPLY_COUNTER (c2, 9)); /* => 15 */
}
#define APPLY_COUNTER ここの APPLY への値渡しが読み解けません
詳しい方、教えてください
お礼
ご丁寧に回答して頂き誠にありがとうございます。 とても参考になりました。