【HTTP服务器】【C++】 lambda函数 匿名函数

系列文章目录



前言

在构建一个HTTP服务器的过程中,调用将某库中的函数封装成类,然后在类中的函数中调用库的函数,库的函数又需要调用类中的函数,所以需要传递一个this指针给库函数。


一、lambda函数

lambda函数又叫匿名函数

C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下:

[capture](parameters)->return-type{body}

如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:

[capture](parameters){body}

下面举了几个Lambda函数的例子:

[](int x, int y) { return x + y; } // 隐式返回类型
[](int& x) { ++x; }   // 没有return语句 -> lambda 函数的返回类型是'void'
[]() { ++global_x; }  // 没有参数,仅访问某个全局变量
[]{ ++global_x; }     // 与上一个相同,省略了()

可以像下面这样显示指定返回类型:

[](int x, int y) -> int { int z = x + y; return z; }

二、使用步骤

在[]中填写当前作用域的参数或变量可以捕获其所在作用域中的变量:
[]:默认不捕获任何变量;
[=]:默认以值捕获所有变量;
[&]:默认以引用捕获所有变量;
[x]:仅以值捕获x,其它变量不捕获;
[&x]:仅以引用捕获x,其它变量不捕获;
[=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
[&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
[this]:通过引用捕获当前对象(其实是复制指针);
[*this]:通过传值方式捕获当前对象;

代码如下:

传递了this指针,lambda函数就可以使用类的函数与变量

    router.GET("/ping", [this](HttpRequest* req, HttpResponse* resp) {

        std::string msg="HttpClass::init";
        std::string back_msg = m_mediator->getRosData(msg, this);
        std::cout << "HTTP服务器收到信息:"<<back_msg <<std::endl;
        Json::Value root = demo_simple();
        return resp->root;
    });


总结

以上就是今天要讲的内容

本文作者:WeSiGJ

参考链接(包括但不限于):
https://www.cnblogs.com/pzhfei/archive/2013/01/14/lambda_expression.html
https://www.jianshu.com/p/d686ad9de817

欢迎各位兄弟姐妹们,加入C++ HTTP服务器开发技术交流群:

QQ群:426685924

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeSiGJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值