从类成员函数到类 C 函数指针的转换

Conversion from class member function to C-like function pointer

本文关键字:函数 转换 指针 成员      更新时间:2023-10-16

我正在为出HTTP请求编写一个围绕cURL库的C++包装器。

我想使用专用的类成员函数进行 cURL 回调(cURL 要求客户端提供读写回调函数来读取和写入上传/下载的内容(。由于 cURL lib 是用 C 语言编写的,因此这些回调必须以 C 函数的形式提供,并具有以下签名:

size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata);
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);

其中userdata是指向用户使用专用 API 保存的数据的指针。

在预先存在的软件中,使用了C++静态函数作为cURL回调,用户数据等于实际处理读/写的对象的this指针。

如前所述,我想使用std::bindstd::mem_fn之类的东西直接将给定类的成员函数传递给 cURL,但这些模板的结果不能按照我的情况分配给 C 函数指针。这个问题有优雅的解决方案吗?

我想使用 std::

bind 或 std::mem_fn 之类的东西直接将给定类的成员函数传递给 cURL,但这些模板的结果不能按照我的情况分配给 C 函数指针。这个问题有优雅的解决方案吗?

使用静态函数(或自由函数(的现有解决方案是唯一的选择。