在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):
}
但不会像在内部使用参数调用函数指针一样优雅。
答案 0 :(得分:4)
您想要的是closure或curried function。不幸的是,C没有这些。 (Apple在其C版本中做了introduce closures,并希望它们将被用于该语言的未来版本,但它不是C99的一部分。)
答案 1 :(得分:3)
你基本上要求一个闭包而不是一个函数指针 - 即一个“对象”中的数据和代码。标准C中不存在这样的对象 - 您可以从Apple的块或其他语言的匿名函数(或从支持它们的语言中的闭包)获得类似的东西,但一般来说,您必须构造一些数据类型正如你所发现的那样。
答案 2 :(得分:1)
GLib有support for closures,主要用于信号回调。它是跨平台的,可能值得一看(取决于您的要求)。 (另请参阅GLib closure API。)
答案 3 :(得分:0)
不,那个结构是你最接近的东西