在C++程序中调用C函数

Calling a C function in a C++ program

本文关键字:函数 调用 C++ 程序      更新时间:2023-10-16

我使用的是一个c库,它有一个API,需要一个c函数指针。

是否可以为该函数指针传递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()。当我这样做的时候,我得到了一个编译错误,说类型的参数不匹配。

这对我有效:

#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);
}

尝试static int mycallback(void *d, char *buffer, int n);

因为mycallback是一个类的方法,所以它的实际实现有点像int mycallback(MyClass &this, void *d, char *buffer, int n),所以它与WRITE_FUNC_T不兼容。试着把它变成static方法,尽管它可能不适合你的需求。