2010-11-11 89 views
1

我正在尋找類似的東西C++的boost::bind但C.我想是能夠:C中的boost :: bind等價物嗎?

bound_function = bind(my_function, some_param); 

,並具有:

bound_function(something); 

執行

myfunction(some_param, something); 

所以基本上,不管綁定到函數指針的東西總是作爲第一個參數傳遞給函數。

有沒有辦法在C這樣做嗎?

不要在家裏做這個孩子。

回答

4

你不能這樣做,C++做的方式,因爲在boost::bind的情況下,使用TMP保存實際綁定值生成的類。

我不知道有什麼方法可以完成C中的任何類似操作。大多數具有這種回調的C API將傳遞一個void *以供您用來解決類似問題。

1

總之,沒有。 C沒有這樣的概念。

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代替),你可能會需要創建多個版本的採取更多的不同類型的論據和論據。

+1

的問題是,你的「綁定」功能是不可呼叫就像一個函數指針,它否定了整點(即綁定參數到的功能,使它們可以被傳遞給期望一個函數指針與「錯」的API參數) – 2010-11-11 22:51:35

+0

@Billy ONeal,OP沒有指定他想將綁定函數傳遞給現有的函數。 – 2010-11-11 22:55:19

相關問題