std::function简单的理解

来源:互联网 发布:高仿lv男包淘宝店 编辑:程序博客网 时间:2024/06/08 05:24

            之前转载了一篇关于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; }代表返回的函数。

0 0