Lambda表达式:代替std::bind的绝佳方法

Lambda表达式:代替std::bind的绝佳方法

lambda表达式使得函数指针有了更灵活的使用方法,但是有些时候,对于大型的函数,还是不建议用lambda表达式,谁也不想在函数里又看到一段长长的函数。

Lambda表达式的用法在:C++11 lambda表达式在for_each和transform算法下的使用已经进行了介绍。另外我在另一篇文章利用C++11的function和bind功能,实现QStandardItemModel的通用遍历函数里使用了std::bind功能,这个函数是为了把一个多变量的函数指针转变为一个指定变量的函数指针
例如有个函数如:

void fun1(int a)

但实际上你可能想要传入的函数是这样写的:

void funMy(int a,double* b,float other)

这时,可以通过std::bind来实现函数的绑定。std::placeholders::_1这种占位符就是用在变量绑定的,但是横看竖看都觉得别扭
上面的例子得这样写

double  b = 1.0;
float other = 2.0;
std::bind(funMy,std::placeholders::_1,&b,other));

当然,如果你不知道还有·std::bind·这样的函数,你可能会这样写:

void funMy_2(int a)
{
    double  b = 1.0;
    float other = 2.0;
    funMy(a,&b,other );
}

这样就把那个三参数的funMy(int a,double* b,float other)转换为单参数的fun1(int a),使得函数指针的参数一致,但是得再写一个函数好麻烦的……
但是有了Lambda表达式后,第二种之前比较不好的方式反而变得更好
因为funMy_2可以这样代替:

double  b = 1.0;
float other = 2.0;
[&](int a){funMy(a,&b,other );}

直接就产生一个匿名的void(*(int))函数指针!

PS:
写这个只是手痒试试CSDN的markDown编辑器而已

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

尘中远

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

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

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

打赏作者

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

抵扣说明:

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

余额充值