#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
}