我正在尝试将lambda传递给CURLOPT_WRITEFUNCTION
。
该函数需要一个静态函数,然而,我从this question那里了解到lambda将被隐式转换,并且我可以从lambda调用成员函数。
auto callback = [](char * ptr_data, size_t size, size_t nmemb, string * writerData)
->size_t
{
if(writerData == NULL)
return 0;
size_t data_size = size * nmemb;
writerData->append(ptr_data, data_size);
return (int)data_size;
};
CURLcode code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, callback);
字符串
这实际上可以编译,但curl segfaults:Segmentation fault: 11
个
我粘贴了完整的示例here。
2条答案
按热度按时间inb24sb21#
神奇的是,在未捕获的lambda表达式中添加前导“+”,这将触发转换为普通C函数指针。
字符串
我的理解是,
curl_easy_setopt
需要一个void*
,而不是一个显式的函数类型,所以编译器只给出lambda对象的地址;如果我们对lambda对象执行函数指针操作,编译器将返回lambda对象的函数指针。vdzxcuhz2#
一个lambda闭包只有在lambda没有捕获的情况下才能转换为函数指针。
您的lambda捕获了
[this]
,因此无法转换。