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
代替),你可能会需要创建多个版本的采取更多的不同类型的论据和论据。
的问题是,你的“绑定”功能是不可呼叫就像一个函数指针,它否定了整点(即绑定参数到的功能,使它们可以被传递给期望一个函数指针与“错”的API参数) – 2010-11-11 22:51:35
@Billy ONeal,OP没有指定他想将绑定函数传递给现有的函数。 – 2010-11-11 22:55:19