zoukankan      html  css  js  c++  java
  • c++将lambda作为callback函数

    想用c++发送http_post请求,用到了libcurl。

    想将其包装一下,因为默认http的响应结果是打印到stdout的,如果想将响应结果另外处理,需要自己定义一个callback函数。

    考虑到我们想将功能包装起来,一个callback函数放到外面不太好,所以考虑使用lambda表达式。

    以下是可以使用的形式:

     1 #include <stdio.h>
     2 #include <curl/curl.h>
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 string http_post(string url, string postdata) {
     8     CURL *curl;
     9     CURLcode res;
    10     string result;
    11     typedef size_t (*curl_write_callback)(char * buffer, size_t size,
    12             size_t nitems, string * outstream);
    13 
    14     auto writer = [](char * buffer,size_t size,size_t nitems,string * outstream)
    15     ->size_t {
    16         if(outstream==NULL)
    17         {
    18             return 0;
    19         }
    20         outstream->append(buffer,size*nitems);
    21         return size*nitems;
    22     };
    23 
    24     curl_global_init(CURL_GLOBAL_ALL);
    25 
    26     curl = curl_easy_init();
    27     if (curl) {
    28         curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    29         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());
    30         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
    31                 (curl_write_callback)writer);
    32         curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
    33         res = curl_easy_perform(curl);
    34         if (res != CURLE_OK)
    35             fprintf(stderr, "curl_easy_perform() failed: %s
    ",
    36                     curl_easy_strerror(res));
    37         curl_easy_cleanup(curl);
    38     }
    39     //cout << "buffer:" << result << endl;
    40     curl_global_cleanup();
    41     return result;
    42 }

    注意到,我们将writer作为参数的时候做了一次强制类型转换。之前没有这个强制类型转换,程序会退出,并返回-1

  • 相关阅读:
    ubuntu16.04安装ibus中文输入法
    apt --fix-broken install
    fuelgauge
    make flash FLASH_CONFIG=jtag_full
    使用android ndk编译boost动态库
    RK3288的gpio设置
    RK3288 GPIO 输出问题
    HDU-2586-裸LCA入门-tarjan离线
    uva-11324-SCC+dp
    HDU-2767-tarjan/Kosaraju求scc
  • 原文地址:https://www.cnblogs.com/vanwoos/p/6807281.html
Copyright © 2011-2022 走看看