代码之家  ›  专栏  ›  技术社区  ›  Brendan Long

boost::在C中绑定等价物?

  •  1
  • Brendan Long  · 技术社区  · 14 年前

    我正在寻找类似于C++的东西。 boost::bind

    bound_function = bind(my_function, some_param);
    

    并拥有:

    bound_function(something);
    

    执行

    myfunction(some_param, something);
    

    在C语言里有什么办法吗?

    不要在家里这样做孩子们。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Billy ONeal IS4    14 年前

    你不能像C++那样去做,因为 boost::bind

    我不知道有什么方法可以在C中实现类似的功能 void *

        2
  •  2
  •   Martin Broadhurst    14 年前

    你能得到的最接近的东西是这样的:

    #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

        3
  •  1
  •   Oliver Charlesworth    14 年前

    一句话,没有C没有这样的概念。