仿函数function和lambda表达式的使用以及cocos2dx中CREATE_FUN()的原理

来源:互联网 发布:描述设置数据有效性 编辑:程序博客网 时间:2024/05/15 15:31
/** * @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;}

阅读全文
0 0
原创粉丝点击