在 C++11 项目中,我使用需要 C 风格回调的 C 风格第三方库(在我的例子中为curl)。
为了实现这一点,我使用了“指向成员的指针”运算符:
size_t c_callback_wrapper(char *ptr, size_t size, size_t nmemb, void *userdata)
{
MyClass *p = (MyClass*)userdata;
return (p->*&MyClass::actualCallback)(ptr, size, nmemb, userdata);
}
void Myclass::performSomething() {
// register callback function
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, c_callback_wrapper);
// register userdata
curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
...
res = curl_easy_perform(curl);
}
这个解决方案确实有效,但对我来说并不令人满意。
我真正想做的是在我的注册函数中编写一个 lambda。
一般来说,优点是局部性:我将能够捕获一些局部变量,并且不需要编写复杂的“actualCallback”成员例程。
我已经读到,当 Lambda 捕获变量时,似乎不可能将其用作 C 风格函数。
有没有什么方法可以通过一些技巧来实现这一目标? (例如,使用 lambda 的调用约定,...)
Thanks