/**
* @author: 龚志慧
* @date: 2017.10.17
*
* 模拟cocos2d-x的宏定义 CREATE_FUNC
* std::function<>的用法,类似函数指针,如果函数参数是拉姆达表达式,
* 函数形参可以用std::function<>,示例如下:
*
*/
#include <iostream>
#include <functional>
/**
* CREATE_FUNC相当于一个公共接口,任何类中调动它,都可以通过
* ClassName::create()来创建该类的对象
*/
#define CREATE_FUN(_TYPE_)\
static _TYPE_* create() \
{ \
_TYPE_ *pRet = new _TYPE_();\
pRet->init();\
//此处应该有 pRet->autorelease();但仅仅练习宏定义函数 没有处理(释放)pRet
return pRet;\
}
class A
{
public:
A(){}
virtual ~A(){}
bool init();
CREATE_FUN(A);
void show();
};
bool A::init()
{
std::cout<< "init() is called!!!" <<std::endl;
}
void A::show()
{
std::cout<< "2show() is called!!!" <<std::endl;
}
//std::function<int(int,int)> f same as typedef int(*Func)(int, int);
//lambda表达式作为函数参数,函数的形参用std::function<>
void gzh(std::function<A*()> f)
{
f()->show();
}
void sum(int a, int b)
{
std::cout<< a+b <<std::endl;
}
int main()
{
A *a = A::create();
a->show();
//以下是function的例子
std::function<void(int,int)> Sum;
Sum = sum;
Sum(1,2);
//函数指针
typedef void(*Func)(int, int);
Func f = sum;
f(4,5);
//lambda表达式作为函数参数
gzh([](){return new A();});
return 0;
}
仿函数function和lambda表达式的使用以及cocos2dx中CREATE_FUN()的原理
最新推荐文章于 2024-08-09 20:53:55 发布