C++11学习笔记之三lamda表达式,std::function, std::bind
//lamda
//first lamda
[]
{};
// second lamda
[]() //or no need () when paramater is null
{
std::cout << "second" << std::endl;
}();// last add(), express will call this lamda func
// 3 with return type
auto kkk = []()
{
return 1;
}();
// 4, set return type
auto kkkk = [] (int i) -> bool { return (bool)i; }(5);
//5, lamda capture, [=], [=,&], [&], [this][] 不捕获...
/*[&] 以引用的方式捕获
[=] 通过变量的一个拷贝捕获
[=, &foo] 通过变量的拷贝捕获,但是用foo变量的引用捕获
[bar] 通过复制捕获,不要复制其他
[this] 捕获this指针对应成员
*/
function, bind等,上代码
#include <iostream>
#include <functional>
using namespace std;
typedef std::function<void()> fp;
typedef std::function<void(int)> fpi1;
void g_fun()
{
std::cout << "global function bind" << std::endl;
} class A
{
public:
static void aFunStatic()
{
std::cout << "aFunStatic" << std::endl;
} virtual void aFun()
{
std::cout << "aFun" << std::endl;
} void aFunI1(int i)
{
std::cout << "aFunI1:" << i << std::endl;
} }; class DerivedA
:public A
{
public:
virtual void aFun() override
{
std::cout << "aFun in DeriveA" << std::endl;
}
}; class B
{
public:
void bCallAFun()
{
if(callFun)
callFun();
}
void bCallAFunStatic()
{
if(callFunStatic)
callFunStatic();
} void bCallAFunI1(int i)
{
if(callFunI1)
callFunI1(i);
} fp callFunStatic;
fp callFun;
fpi1 callFunI1;
}; void main()
{
B b;
A a; //bind to global function
fp f = fp(&g_fun);
f(); //bind to class function
//static
b.callFunStatic = std::bind(&A::aFunStatic);
b.bCallAFunStatic(); //no static function without parameter
b.callFun = std::bind(&A::aFun, &a);
b.bCallAFun(); //no static function with parameter
b.callFunI1 = std::bind(&A::aFunI1, &a, std::placeholders::_1);
b.bCallAFunI1(); //about polymorphic
DerivedA da;
b.callFun = std::bind(&A::aFun, &da);
b.bCallAFun();
}
C++11学习笔记之三lamda表达式,std::function, std::bind的更多相关文章
- C++11 学习笔记 std::function和bind绑定器
C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...
- java学习笔记06--正则表达式
java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...
- Dart学习笔记-运算符-条件表达式-类型转换
Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
- c++11——std::function和bind绑定器
c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有ope ...
- 2.cocos2dx 3.2在语法的差异,lambada使用表达式和function和bind使用功能
1 打开 - 内置T32 Cocos2dx-3.2一个专案 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhb ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
- c++11多线程学习笔记之三 condition_variable使用
从windows角度来说,condition_variable类似event. 阻塞等待出发,不过condition_variable可以批量出发. 代码如下: // 1111111.cpp : 定义 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- MySQL单表多字段模糊查询解决方法 又折磨半天concat(字段不能为空,如为空则用IFNULL(字段,'');
SELECT `id`,`weixin_id`,`user_name`,`sex`,`area_id`,`address_near`,`phone`,`create_time`,`import_use ...
- Java 版本6下载大全
Oracle 官方 JDK6 下载地址: 基本包含所有的JDK6版本. 需要登注册相应的账户登录到Oracle官网~ http://www.oracle.com/technetwork/java/ja ...
- MySQL 5.7.18 主从复制 Error1205
从库报 error 1205 1.mysql报错信息 [root@slave2(35.102) ~]# mysql -uroot -p Enter password: Welcome to the M ...
- 第十一章 Helm-kubernetes的包管理器(上)
Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的. 比如对于一个MySQL服务,K8s需要部署如下对 ...
- org.hibernate.Session常用方法的作用总结
clear(): 清理session缓存.把所有加载出来的持久化实例都从session缓存中清除,同时,也会挂掉当前session中正在排队的save,update,delete操作. evict: ...
- canvas之画矩形
<canvas id="canvas" width="600" height="500" style="background ...
- java传递是引用的拷贝,既不是引用本身,更不是对象
java传递是引用的拷贝,既不是引用本身,更不是对象 2008-09-16 04:27:56| 分类: Java SE|举报|字号 订阅 下载LOFTER客户端 1. 简单类型是按值 ...
- 数据库设计不推荐使用Bool类型
参见博文:http://blog.csdn.net/zhang_xinxiu/article/details/8521673
- 关于微信支付URL未注册其中的坑THINKPHP5
1 微信支付是区分大小写的 TP有的URL 会默认转换 http://ams.###.com/index/Pay/wechat/order_number/ 会被解析 http://ams.###.co ...
- Linux下编译、安装并启动memcached
首先使用yum安装gcc make.autoconf.libtool系列工具,这几个工具是编译所需要的,命令如下: yum install gcc make autoconf libtool 然后到l ...