我有以下问题。我必须使用一个回调函数。实现回调是棘手的部分,因为我需要更多的信息,我可以从输入参数中提取。我会试着举个例子:
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>
答案 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); };