文档章节

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

尘中远
 尘中远
发布于 2016/05/12 23:52
字数 465
阅读 124
收藏 0
点赞 2
评论 0

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编辑器而已

© 著作权归作者所有

共有 人打赏支持
尘中远
粉丝 1
博文 26
码字总数 47436
作品 0
朝阳
程序员
[转]想看懂WebRtc,你须知道的C++11新特性「lambda,std::function以及std:bind」

转自:只为那传说中美丽的草原 C++11 中增加了许多的新特性。 在本文中,我们来聊一下lambda表达式,闭包,std::function以及std::bind。 lambda 表达式 C++11中新增了lambda 表达式这一语言...

音视频直播技术专家 ⋅ 2017/11/09 ⋅ 0

c++ 11 新特性

new (std::nothrow)A()当内存不足时,返回null std::function<A(int)>代表一个可调用对象,接受1个int的参数,返回值是A 对于c++ 对象的方法,可以通过std::bind 转换为可调用对象 A a ...

yizhangxyz ⋅ 2016/04/28 ⋅ 0

CC_CALLBACK原理及应用

c++ 11 基础 : std::function 类模版 std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标进行存储、复制、和调用操作,这些目标包括函数、lambda表达式...

霄霄月月 ⋅ 2014/04/07 ⋅ 1

函数对象的四种写法,哪种更适合你?

摘要:作为函数式编程的核心,函数对象的创建和传递都有不同的实现方法。本文将带领你一同了解四种函数对象创建方法和两种函数对象传递方法,并剖析其各自的优劣之处。 数十款阿里云产品限时...

汪星人1997 ⋅ 04/24 ⋅ 0

有效使用 Lambda 表达式和 std::function [翻译]

翻译自 Dr. Dobb's 的一篇关于 C++11 的 lambda 表达式, 闭包 和 std::function 的文章 原文: Efficient Use of Lambda Expressions and std::function 作者: Cassio Neri 译文: 有效使用 La......

晨曦之光 ⋅ 2012/05/23 ⋅ 0

如何利用 C++ 的 Lambda 表达式提升 Qt 代码

原文出处:oschina Lambda 表达式是在 C++11 中加入的 C++ 特性。在这篇文章中我们将看到如何用 Lambda 表达式来简化 Qt 代码。Lambda 很强大,但也要小心它带来的陷阱。 首先,什么是 Labm...

oschina ⋅ 2017/02/09 ⋅ 0

C++泛型算法定制操作之突破参数限制的方法

C++提供了很多泛型算法,可以对各个容器使用,如sort对迭代器范围内的容器元素排序、unique把不重复的元素排列到容器前列去、copy复制范围内的容器元素、find寻找符合条件的容器元素等等。 ...

Cloudox_ ⋅ 04/26 ⋅ 0

C++如何不使用C++11的新特性来实现一个自动注册的工厂?

各位好,我想写一个类似于链接中的C++中实现自动注册的工厂的工厂模式,博客中使用了C++11标准的lambda表达式和std::function,因为工作中不能使用支持C++11标准的编译器,所以想请问一下各位...

西行寺幽幽子 ⋅ 2016/04/12 ⋅ 5

C++11 lambda 表达式解析

很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda...

暖冰 ⋅ 2015/11/16 ⋅ 0

C++中的匿名函数(译)

C++11最令人兴奋的特性之一就是能够创建匿名函数(lambda functions),有时也被称为闭包(closures)。这意味着什么?lambda function是一个可以内联写在代码里的函数(通常被传递给另一个函...

LsDimplex ⋅ 2016/11/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

线程池

一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 二、线程池的体系结构: java.util.concurrent.Executor : 负责线程的使用...

stars永恒 ⋅ 24分钟前 ⋅ 0

你值5K还是15K?实战案例,测测你的分析功力

本文源自陈老师遇到的真实案例。 老板说:“我们今年准备参加展会,做一年。以前我没参加过,没关系,这里有一份展会数据,你回去分析下哪些有价值,后边组织的时候有个指导”。现在你收到任...

加米谷大数据 ⋅ 26分钟前 ⋅ 0

中文转英文功能

package com.sysware.task.util;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.for......

AK灬 ⋅ 27分钟前 ⋅ 0

JNI Java层类关联C/C++层的类

Android开发时,因为要实现某某功能,需要集成算法公司的算法库(so库),这就需要自己编写JNI。 通常这些库提供的接口可以概况成1、初始化 2、算法处理 3、释放 4、打印版本号 初始化后会返...

国仔饼 ⋅ 30分钟前 ⋅ 0

maven下载jar包改为阿里云的maven库

一:修改maven安装路径中conf文件夹下的setting.xml文件 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/......

夜醒者 ⋅ 31分钟前 ⋅ 0

电商用户行为分析大数据平台相关系列10-基础数据结构分析

电商用户行为分析大数据平台相关系列1-环境介绍 电商用户行为分析大数据平台相关系列2-HADOOP环境搭建 电商用户行为分析大数据平台相关系列3-HIVE安装 电商用户行为分析大数据平台相关系列4...

xiaomin0322 ⋅ 32分钟前 ⋅ 0

使用readLine()方法遇到的坑

下午玩 TCP/IP 的 Socket 通信时,使用 BufferedReader 的 readLine() 遇到了一个坑,现在终于解决了,特此记录下来。 程序很简单,客户段从控制台读取用户输入,然后发送至服务器端,主要代...

孟飞阳 ⋅ 32分钟前 ⋅ 0

基于Hadoop集群的Hive安装配置(Derby数据库)

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行(具体的Hive架构大家自行搜索)。接下来主要讲下Hadoop集群下...

海岸线的曙光 ⋅ 33分钟前 ⋅ 0

CoreOS裸机iso安装和相关配置

裸机通过iso安装CoreOS,个人趟了很多坑,以下就是完整的从零开始部署和配置的过程,希望对大家有用。 一、安装CoreOS到硬盘 1. 准备Live iso镜像,制作好usb启动盘 Live iso下载地址 2. 搭建...

ykbj ⋅ 38分钟前 ⋅ 0

jquery控制表格锁列(转)

表格已经完成后新加的需求,要实现锁表格的第一列。很多带这种效果的都是js封装的框架或者具体某种框架的组件,不适用解决当前问题。作为后端开发又实在不熟样式,搜到了一个可以用的,虽然样...

刘昌鑫 ⋅ 40分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部