码迷,mamicode.com
首页 > 其他好文 > 详细

std::function简单的理解

时间:2015-08-25 23:47:45      阅读:634      评论:0      收藏:0      [点我收藏+]

标签:function   c++   cocos2d-x   

            之前转载了一篇关于std::function,讲的太专业了,但是貌似看懂了,但是没能深入理解,今天在看案例时,突然懂得了。

#define STRINGIFY(x) #x

#define TRANS(__className__) {                                          [](float t, Scene* s){ return __className__::create(t,s);},             STRINGIFY(__className__),                                       }
struct _transitions {
    std::function<TransitionScene*(float t, Scene* s)> function;
    const char * name;
} transitions[] = {
    TRANS(TransitionMoveInL),
    TRANS(TransitionMoveInR),
    TRANS(TransitionMoveInT),
    TRANS(TransitionMoveInB),

   };

TransitionsTests::TransitionsTests()
{
    int sceneIndex = 0;

    for (auto& test : transitions)
    {
        addTestCase(test.name, [sceneIndex](){
            auto scene = TransitionsTest::create();
            // fix bug #486, without setDepthTest(false), FlipX,Y will flickers
            Director::getInstance()->setDepthTest(false);

            if (sceneIndex % 2)
            {
                scene->addChild(TestLayer2::create(transitions[sceneIndex].name));
            }
            else
            {
                scene->addChild(TestLayer1::create(transitions[sceneIndex].name));
            }

            return transitions[sceneIndex].function(TRANSITION_DURATION, scene);
        });

        sceneIndex++;
    }
}
TransitionMoveInL,TransitionMoveInR,TransitionMoveInT,TransitionMoveInB,这四个函数都是TransitionScene的子类,当我们定义了std::function<TransitionScene*(float t,Scene* s)>function时,这个function就可以代表四个子类了,这样做的目的就是为了赋值或是初始化。这样我们就可以使用for循环进行,避免了一个一个的初始化,减轻工作量,同时方便函数的使用。

多说一句:[ ](){return ;},这个符号一直没看懂,今天终于 看懂了[ ]可以理解为数组符号,()理解为构造函数的参数,{return; }代表返回的函数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

std::function简单的理解

标签:function   c++   cocos2d-x   

原文地址:http://blog.csdn.net/sh15285118586/article/details/47985149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!