您通常可以使用以下规则在 C 中翻译(简单)C++:
- 一个 C++ 类在 C 中变成一个只包含属性(无方法)的结构
- C++ 方法是 C 函数,将指向对象(此处为结构)的指针作为第一个参数
你的数据在这里:
- 一个指向函数的指针,该函数采用 void * 参数并返回 void
- 指向参数的指针
但是您不会将它作为指向函数的指针传递,而是作为指向结构的指针:
typedef struct _binder {
void (*action)(void *param);
void *param;
} binder;
当你想绑定 actionOnM(&myTypeInstance) 你只需:
binder *bind = malloc(sizeof(binder));
bind->action = &actionOnM;
bind->param = &myTypeInstance;
然后您可以将绑定函数作为单个参数 bind 传递:
void otherFunct(binder *bind, int otherParam) {
/* ... */
bind->action(bind->param); /* actual call to bound function */
/* ... */
}
当然还有free(bind) :-)
如果您希望所有这些都更接近 C++ 方式,只需定义一个执行器函数:
void bind_call(binder *bind) {
bind->action(bind->param);
}
然后其他功能将变为:
void otherFunct(binder *bind, int otherParam) {
/* ... */
bind_call(bind); /* actual call to bound function */
/* ... */
}