0

我正在我的代码中使用一个c库。c++他们API要求我传递具有给定签名的某个函数指针。假设它类似于以下内容:

typedef int (*api_fun_t)(int);

我想要做的是传递依赖于在运行时确定的某些参数的函数指针。最初我想定义如下内容:

api_fun_t my_specialized_fun(int param){
    int fun(int x){
        // decide what to do based on param
    }
    return fun;
}

但问题c++不允许嵌套函数定义。接下来我想我可以通过如下模板来实现这一点

template <int param>
fun (int x){
    //decide what to do based on param
}

有没有其他不涉及全局和/或静态变量的方法?

4

2 回答 2

2

使用 C++11 lambdas 而不是嵌套函数。例如:

typedef int (*api_fun_t)(int);

api_fun_t my_specialized_fun(int param){
   return [](int x) {x++; return x;};
}
于 2012-11-05T07:37:10.603 回答
0

假设 API 允许您传递用户参数(正如所有精心设计的 C 风格回调 API 所做的那样),使用结构来保存数据,并将指向它的指针作为参数传递。然后,您可以使用结构的成员数据或酌情调用成员函数。您必须确保结构的生命周期足够长。

如果 API 不允许您传递用户参数,您唯一的选择是全局变量,如果多线程是一个问题,则为线程本地。并给 API 的设计者写一封愤怒的电子邮件。

于 2012-11-05T09:55:18.453 回答