我正在使用一个c库,它有一个期望C函数指针的API。
是否可以为此函数指针传递C ++类成员函数?
以下是C API:
typedef int (*WRITE_FUNC_T)(void *d, char *buffer, int n);
void start(WRITE_FUNC_T callback);
class MyClass {
public:
int mycallback(void *d, char *buffer, int n);
}
我想将MyClass::mycallback
传递给start()
。当我这样做时,我得到一个编译错误,说类型的参数不匹配。
答案 0 :(得分:1)
这对我有用:
#include <iostream>
#include <sstream>
typedef int (*WRITE_FUNC_T)(void *d, char *buffer, int n);
void start(WRITE_FUNC_T callback) {}
class MyClass {
public:
int mycallback(char *buffer, int n) {
return 0;
}
static int newcallback(void *d, char *buffer, int n) {
return static_cast<MyClass*>(d)->mycallback(buffer, n);
}
};
int main() {
start(&MyClass::newcallback);
}
答案 1 :(得分:0)
尝试static int mycallback(void *d, char *buffer, int n);
答案 2 :(得分:0)
因为mycallback
是一个类的方法,所以它的实际实现类似于int mycallback(MyClass &this, void *d, char *buffer, int n)
,它与WRITE_FUNC_T
不兼容。尝试将其转换为static
方法,尽管它可能不符合您的需求。
答案 3 :(得分:0)
我希望这可以帮助你。
class ClassA
{
public:
int Callback(void *d, char *buffer, int n)
{
return 0;
}
};
typedef int(ClassA::*FncPtr)(void *d, char *buffer, int n);
int main(int argc, const char** args)
{
ClassA* classA = new ClassA();
int retVal = (*classA.*(&ClassA::Callback))(0x00,0x00,0);
return 0;
}