相关疑难解决方法(0)

C++11 中的 C 风格回调

在 C++11 项目中,我使用的是 C 风格的第三方库(在我的例子中是 curl),它需要 C 风格的回调。

为了实现这一点,我使用了“指针到成员”运算符:

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);
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案确实有效,但对我来说并不令人满意。

我真正想做的是在我的注册函数中编写一个 lambda。

优势通常是局部性:我将能够捕获一些局部变量,并且无需编写复杂的“actualCallback”成员例程。

我已经读过,当 Lambda 捕获变量时,似乎不可能将它们用作 C 风格的函数。

有什么方法可以使用一些技巧来实现这一目标吗?(例如玩 lambdas 的调用约定,...)

谢谢

c++ lambda curl callback c++11

5
推荐指数
1
解决办法
3823
查看次数

标签 统计

c++ ×1

c++11 ×1

callback ×1

curl ×1

lambda ×1