C中的boost :: bind等价物?

时间:2010-11-11 22:31:40

标签: c macros

我正在寻找类似于C ++的boost::bind但在C中的东西。我想要的是能够:

bound_function = bind(my_function, some_param);

并且:

bound_function(something);

执行

myfunction(some_param, something);

基本上,无论绑定到函数指针的是什么,都将作为第一个参数传递给函数。

有没有办法在C中做到这一点?

不要在家里做孩子。

3 个答案:

答案 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没有这样的概念。