C中的boost :: bind等价物吗?

问题描述:

我正在寻找类似的东西C++的boost::bind但C.我想是能够:C中的boost :: bind等价物吗?

bound_function = bind(my_function, some_param); 

,并具有:

bound_function(something); 

执行

myfunction(some_param, something); 

所以基本上,不管绑定到函数指针的东西总是作为第一个参数传递给函数。

有没有办法在C这样做吗?

不要在家里做这个孩子。

你不能这样做,C++做的方式,因为在boost::bind的情况下,使用TMP保存实际绑定值生成的类。

我不知道有什么方法可以完成C中的任何类似操作。大多数具有这种回调的C API将传递一个void *以供您用来解决类似问题。

总之,没有。 C没有这样的概念。

最接近你可以得到的是这样的:

#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代替),你可能会需要创建多个版本的采取更多的不同类型的论据和论据。

+1

的问题是,你的“绑定”功能是不可呼叫就像一个函数指针,它否定了整点(即绑定参数到的功能,使它们可以被传递给期望一个函数指针与“错”的API参数) – 2010-11-11 22:51:35

+0

@Billy ONeal,OP没有指定他想将绑定函数传递给现有的函数。 – 2010-11-11 22:55:19