C,带参数预设的函数指针

时间:2010-06-30 04:02:34

标签: c function-pointers

在C中这样的事情可能吗?

#include <stdio.h>

void print_str(char *str) {
        printf(str);
}

int main() {

        void (*f_ptr)() = print_str,"hello world";

        f_ptr();

}

//see "hello world" on stdout

简而言之,我想要一个“存储”参数的函数指针。关键是函数指针可以在以后使用而无需引用原始数据。

我可以使用这样的东西来耦合函数指针和参数引用

struct f_ptr {
 void (*f)();
 void *data;
}

void exec_f_ptr(f_ptr *data) {
  data->f(data->data):
}

但不会像在内部使用参数调用函数指针一样优雅。

4 个答案:

答案 0 :(得分:4)

您想要的是closurecurried function。不幸的是,C没有这些。 (Apple在其C版本中做了introduce closures,并希望它们将被用于该语言的未来版本,但它不是C99的一部分。)

答案 1 :(得分:3)

你基本上要求一个闭包而不是一个函数指针 - 即一个“对象”中的数据和代码。标准C中不存在这样的对象 - 您可以从Apple的块或其他语言的匿名函数(或从支持它们的语言中的闭包)获得类似的东西,但一般来说,您必须构造一些数据类型正如你所发现的那样。

答案 2 :(得分:1)

GLib有support for closures,主要用于信号回调。它是跨平台的,可能值得一看(取决于您的要求)。 (另请参阅GLib closure API。)

答案 3 :(得分:0)

不,那个结构是你最接近的东西