C++11新特性(六)bind,function,lambda简单使用
来源:互联网 发布:javascript dom教程 编辑:程序博客网 时间:2024/06/05 03:04
#include <iostream>
#include <functional>
using namespace std;
class Node;
class Touch;
class Event;
#define FUNCTIONCALL function<void(Touch* touch, Event *event)>
#define CC_CAL_BACK2(selector, target, ...) bind(&selector, target, \
std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
class Node
{
};
class Sprite :public Node
{
public:
Sprite(){};
virtual ~Sprite(){}
void beginTouch(Touch* touch,Event *event, int num);
};
voidSprite::beginTouch(Touch* touch,Event *event, int num)
{
cout <<"Sprite beginTouch evoked" << endl;
}
class NormalSprite
{
public:
NormalSprite(){};
virtual ~NormalSprite(){}
void beginTouch(Touch* touch,Event *event);
};
voidNormalSprite::beginTouch(Touch* touch,Event *event)
{
cout <<"NormalSprite beginTouch evoked" << endl;
}
class Event
{
};
class Touch
{
public:
Touch();
virtual ~Touch();
};
Touch::Touch()
{
}
Touch::~Touch()
{
}
class Dispatch
{
public:
FUNCTIONCALL m_fun;
void evokeEvent();
};
voidDispatch::evokeEvent()
{
m_fun(new Touch, new Event);
}
int main()
{
int datas[]{2,3,4,1,2};
for_each(datas, datas + 5, [](int n){std::cout << n <<" ";});
cout << std::endl;
int sum = 90;
auto f = [=](int a,int b){return ((a +b) + sum);};
int result = f(1000,1000);
std::cout << result <<std::endl;
std::cout << sum <<std::endl;
auto f2 = [&](int a,int b){ sum += 100;return ((a +b) + sum);};
int result2 = f2(1,2);
std::cout << result2 <<" "<< sum << std::endl;
Sprite s;
Dispatch *_dispatch = new Dispatch();
_dispatch->m_fun =CC_CAL_BACK2(Sprite::beginTouch, s,10);
_dispatch->evokeEvent();
NormalSprite n;
_dispatch->m_fun =CC_CAL_BACK2(NormalSprite::beginTouch, n);
_dispatch->evokeEvent();
cout <<"Everything is ok!" << endl;
return 0;
输出结果如下:
2 3 4 1 2
2090
90
193 190
Sprite beginTouch evoked
NormalSprite beginTouch evoked
Everything is ok!Program ended with exit code: 0
}
- C++11新特性(六)bind,function,lambda简单使用
- C++新特性(function+bind)
- 【C++】C++11特性:lambda和function
- 【C++】C++11新特性 之 lambda表达式的使用
- C++11 笔记 std::function,bind绑定器和lambda
- C++11新特性之std::bind与std::function
- C++11新特性之std::function & std::bind
- ECMASCript5新特性之Function.prototype.bind
- 【C/C++】C++11新特性:std::bind
- c++11新特性 lambda
- c++11新特性--Lambda
- C++11 std::bind std::function 高级用法 (c++11的新特性)
- 【C++11】新特性——std::function 和 std::bind
- 【C++11】新特性——function、bind以及lamda表达式
- C++11新特性应用--实现延时求值(std::function和std::bind)
- lambda, std::function, std::bind
- C++中的bind function lambda
- 函数指针,function,bind, lambda
- readelf命令的使用
- 抽象类学习笔记
- UVa 10340 All in All(子序列)
- csu Problem B: String and Arrays
- TzSU 2mFiP愛迪達 GX86 skB
- C++11新特性(六)bind,function,lambda简单使用
- StringBuffer与StringBuilder区别
- POJ1011
- sql子查询
- linux 性能测试工具Lmbench 使用方法
- 安卓面试必问二安卓内存优化OR OOM 内存溢出
- 安卓简历技术点之熟练使用Handler以及AsyncTask异步框架。
- Hello World 程序样例,常见语言差不多都有了
- 中国34个三十四个省会城市的货郎担回路15531千米