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

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

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

以下是可以使用的形式:

 #include <stdio.h>
#include <curl/curl.h>
#include <iostream> using namespace std; string http_post(string url, string postdata) {
CURL *curl;
CURLcode res;
string result;
typedef size_t (*curl_write_callback)(char * buffer, size_t size,
size_t nitems, string * outstream); auto writer = [](char * buffer,size_t size,size_t nitems,string * outstream)
->size_t {
if(outstream==NULL)
{
return ;
}
outstream->append(buffer,size*nitems);
return size*nitems;
}; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
(curl_write_callback)writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
//cout << "buffer:" << result << endl;
curl_global_cleanup();
return result;
}

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

c++将lambda作为callback函数的更多相关文章

  1. javascript callback函数的理解与使用

    最近做的一个项目中用到了callback函数,于是就研究了下总结下我对javascript callback的理解 首先从callback的字面翻译“回调” 可以理解这是一个函数被调用的机制 当我们遇 ...

  2. jQuery 停止动画、jQuery Callback 函数、jQuery - Chaining

    一.jQuery 停止动画 jQuery stop() 方法用于在动画或效果完成前对它们进行停止. stop() 方法适用于所有 jQuery 效果函数,包括滑动.淡入淡出和自定义动画. $(sele ...

  3. jQuery Callback 函数

    @(编程) Callback 函数在当前动画 100% 完成之后执行. jQuery 动画的问题 许多 jQuery 函数涉及动画.这些函数也许会将 speed 或 duration 作为可选参数. ...

  4. 关于Ajax使用 Callback 函数

    1.onreadystatechange 事件 当请求被发送到服务器时,我们需要执行一些基于响应的任务. 每当 readyState 改变时,就会触发 onreadystatechange 事件. r ...

  5. 什么叫CallBack函数,怎么用回调函数?

    JQuery众多常用方法中很经常会用到回调函数, 理解好js callback函数定义及用法,我们就可以利用callback函数帮我们做很多事情啦! A callback is a function ...

  6. Python lambda和reduce函数

    看到一篇博文写lambda和reduce函数.笔者小痒了一下,用Python实现一下: #! /usr/bin/env python # -*-coding:utf-8-*- import time ...

  7. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  8. 【python深入】map/reduce/lambda 内置函数的使用

    python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍: 一.map相关 map()会根据提供的函数对指定的序 ...

  9. lambda创建匿名函数

    1)print map(lambda x: x + 1, [y for y in range(10)]) 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]map(lambda &l ...

随机推荐

  1. 读书笔记-iOS核心动画高级技巧

    如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签

  2. 使用PrintDBGridEh进行打印 (转)

    使用PrintDBGridEh进行打印 (转)   if not ADOQuery1.Active then exit;  if ADOQuery1.RecordCount<=0 then ex ...

  3. LeetCode 977 Squares of a Sorted Array 解题报告

    题目要求 Given an array of integers A sorted in non-decreasing order, return an array of the squares of ...

  4. Orchard Core 中数据库使用postgresql-10

    在配置好Startup.cs后,运行程序: 首先需要设置一些基本信息.这里我试着配置如下,数据库使用postgresql,连接字符串像这样: Host=192.168.0.111;UserName=u ...

  5. tomcat停止和启动脚本

    日常重启tomcat比较麻烦,所以写了2个脚本,在脚本后输入tomcat名称即可 启动或重启tomcat #!/bin/sh TOMCAT_HOME=/usr/java/$1 if [ ! -n &q ...

  6. 连连看java版

    主界面 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt. ...

  7. SpringBoot-YML的用法

    SpringBoot yml 使用 SpringBoot 默认读取 application.yml|properties YML 比properties配置文件更加节约 简约(结构) 创建applic ...

  8. 下载pywin32

    下载pywin32 链接:sourceforge.net/projects/pywin32/files/ 1.找到一个pywin32的文件夹 2.下一级目录里面有多个文件夹. 3.打开Build222 ...

  9. 【剑指offer】最小的K个数

    一.题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.思路: 一群大牛在讨论用噼里啪啦各种排序,复杂度一般也都是O ...

  10. 解决PHP5.6版本“No input file specified”的问题

    问题描述:使用TP框架做项目时,在启用REWRITE的伪静态功能的时候,首页可以访问,但是访问其它页面的时候,就提示:“No input file specified.”原因在于使用的PHP5.6是f ...