代码之家  ›  专栏  ›  技术社区  ›  Mike

C、 预置参数的函数指针

  •  5
  • Mike  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  3
  •   Jonathan Grynspan    15 年前

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

        2
  •  4
  •   Chuck    15 年前
        3
  •  1
  •   detly    15 年前

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

        4
  •  0
  •   Bwmat    15 年前

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