所以我有一个void (*actionOnM)( void * myTypeInstance)
类型的函数,我需要将其包装成void (*action)()
并传递。这样的事情可能在C?
答案 0 :(得分:3)
您通常可以使用以下规则在C语言中翻译(简单)C ++:
此处您的数据是:
但是你不会将它作为指向函数的指针传递,而是作为指向结构的指针:
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 */
/* ... */
}
答案 1 :(得分:1)
你可以有一个包装函数,然后传递一个默认参数,大概是NULL
,如
void action()
{
actionOnM(NULL);
}
我相信c ++,如果你设置actionOnM()
的默认参数,它就可以工作,所以这就模仿了。