当需要指向全局函数的指针时,如何使用指向成员函数的指针?

时间:2014-08-01 09:59:14

标签: c++ pointers function-pointers

我有以下问题。我必须使用一个回调函数。实现回调是棘手的部分,因为我需要更多的信息,我可以从输入参数中提取。我会试着举个例子:

typedef int (*fptr) (char* in, char* out); // the callback i have to implement
int takeFptr(fptr f, char* someOtherParameters); // the method i have to use

问题是我需要除“in”参数之外的其他信息来构造“out”参数。我试过这种方法:

class Wrapper {
    public:
        int callback(char* in, char* out){
           // use the "additionalInfo" to construct "out"
        }
        char* additionalInfo;
}

...
Wrapper* obj = new Wrapper();
obj->additionalInfo = "whatIneed";
takeFptr(obj->callback, someMoreParams);

我从编译器中收到以下错误:

  

错误:无法将'Wrapper :: callback'从类型'int(Wrapper ::)(char *,char *)'转换为'fptr {aka int(*)(char *,char *)}'< / p>

1 个答案:

答案 0 :(得分:4)

你需要传递你需要传递的东西,在这种情况下是一个指向函数的指针。

::std::function<int (char*, char*)> forwardcall;

int mycallback(char* in, char* out) // extern "C"
{
  return forwardcall(in, out);
}

forwardcall可以包含任何仿函数,例如:

forwardcall = [obj](char* in, char* out){ return obj->callback(in, out); };