これは、可変引数マクロ(C99)を使用して取得した最も美しい構文です。
#define call(obj, method, ...) ((obj).method(&(obj), __VA_ARGS__))
使用法 (ideone をクリック) :
struct class {
int a;
int (*method)(struct class* this, int b, int c);
};
int code(struct class* this, int b, int c) {
return this->a*b+c;
}
struct class constructor(int a) {
struct class result = {a, code};
return result;
}
#define call(obj, method, ...) ((obj).method(&(obj), __VA_ARGS__))
#include <stdio.h>
int main() {
struct class obj = constructor(10);
int result = call(obj, method, 2, 3);
printf("%d\n", result);
return 0;
}