C++11新特性(六)bind,function,lambda简单使用

#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);

    

    

};



void Sprite::beginTouch(Touch* touch, Event *event, int num)

{

    cout << "Sprite beginTouch evoked" << endl;

    

}



class NormalSprite

{

public:

    

    NormalSprite(){};

    virtual ~NormalSprite(){}

    void beginTouch(Touch* touch, Event *event);

    

};




void NormalSprite::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();

    

    

};


void Dispatch::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

    



}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值