//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的更多相关文章

  1. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  2. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  3. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  4. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  5. c++11——std::function和bind绑定器

    c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有ope ...

  6. 2.cocos2dx 3.2在语法的差异,lambada使用表达式和function和bind使用功能

    1        打开 - 内置T32  Cocos2dx-3.2一个专案 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhb ...

  7. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  8. c++11多线程学习笔记之三 condition_variable使用

    从windows角度来说,condition_variable类似event. 阻塞等待出发,不过condition_variable可以批量出发. 代码如下: // 1111111.cpp : 定义 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. 运维平台cmdb开发-day1

    序读项目由来 终极目标,运维平台.自动化.装机,监控,安装软件,部署基础服务,资产管理,之前是excel,现在是客户端自动获取,变更记录 后台管理 api 采集资产 四种模式agent 定时,每天执行 ...

  2. 模拟admin组件自己开发stark组件之创建篇

    admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...

  3. ArraySort--冒泡排序、选择排序、插入排序工具类demo

    public class ArraySort { private long[] a; private int nElems; public ArraySort(int max){ a=new long ...

  4. hdu-1052-Tian Ji -- The Horse Racing(经典)

    /* hdu-1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...

  5. Fiddler监控面板显示ServerIP栏(Fiddler v5.0)

    Fiddler监控面板默认没有ServerIP这一栏,添加此栏方法如下: 1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.在脚本中添加对 ...

  6. Linux基础综合练习

    Linux基本操作综合练习 1.建立用户zhangsan,密码使用明文123456: 命令:useradd -p 123456 zhangsan 解释: 参数 -p 添加明文密码 useradd添加用 ...

  7. tkinter实现的文本编辑器

    效果:                                                     # -*- encoding: utf8 -*- #python 2.7 from Tk ...

  8. ascii码与二进制码有何区别?

    ascii编码和二进制码是两个概念.ASCII主要是为了电脑显示和传输拉丁字母而发明的一套编码,二进制则是为了计算机方便计算.传输数据而使用的一种方法.ASCII(American Standard ...

  9. Nodejs&Express

    http://www.expressjs.comhttp://github.com/lelandtseng/form-datahttp://github.com/lelandtseng/mongo-m ...

  10. 使用ExitProcess()结束本进程、TerminateProcess 结束进程

    进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的.当主线程的进入点函数返回时,进程也就随之结束.这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的 ...