我正在寻找类似于C ++的boost::bind
但在C中的东西。我想要的是能够:
bound_function = bind(my_function, some_param);
并且:
bound_function(something);
执行
myfunction(some_param, something);
基本上,无论绑定到函数指针的是什么,都将作为第一个参数传递给函数。
有没有办法在C中做到这一点?
不要在家里做孩子。
答案 0 :(得分:4)
你不能像C ++那样做,因为在boost::bind
的情况下,使用保存实际绑定值的TMP生成一个类。
我不知道有什么方法可以在C中完成任何类似的事情。大多数带有这样回调的C API会传递void *
以供你解决这类问题。
答案 1 :(得分:2)
你能得到的最接近的是:
#include <stdio.h>
#include <stdlib.h>
typedef void (*function)(void*);
typedef struct {
void *arg;
function fn;
} binder;
binder *binder_create(function fn, void *arg)
{
binder *b = malloc(sizeof(binder));
if (b) {
b->fn = fn;
b->arg = arg;
}
return b;
}
void binder_delete(binder *b)
{
free(b);
}
void binder_exec(binder *b)
{
b->fn(b->arg);
}
int main(void)
{
binder *myfunc = binder_create((function)puts, "Hello, World!\n");
binder_exec(myfunc);
binder_delete(myfunc);
return 0;
}
它不会像语法一样给你函数调用(你需要调用binder_exec
),你可能需要创建几个版本,这些版本需要更多不同类型的参数和参数。
答案 2 :(得分:1)
总之,没有。 C没有这样的概念。