【发布时间】:2014-09-24 12:03:44
【问题描述】:
我有以下问题。我必须使用一个接受回调的函数。实现回调是棘手的部分,因为除了可以从输入参数中提取之外,我还需要更多信息。我试着举个例子:
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*)}'
【问题讨论】:
-
呃。如果没有希望更改您需要用来获取
std::function或其他内容的界面,那么bind或类似内容将无法帮助您。您只需要创建一个包装器全局函数,该函数知道在哪里可以找到Wrapper的某个实例并在其上调用callback。这很糟糕,因为它有效地迫使您拥有某种全球数据。 -
即使您可以从指向成员的指针转换为普通函数指针(您不能在可移植代码* 中),您如何期望
this指针可用于回调?
标签: c++ pointers function-pointers