std::function 간단한 이해

1811 단어 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 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::functionfunction을 정의할 때 이 function은 네 개의 하위 클래스를 대표할 수 있습니다. 이렇게 하는 목적은 값을 부여하거나 초기화하기 위한 것입니다.이렇게 하면 우리는 for순환을 사용하여 진행할 수 있고 하나하나의 초기화를 피하고 작업량을 줄일 수 있으며 함수의 사용을 편리하게 할 수 있다.
한마디 더: [] () {return;},이 기호는 줄곧 이해하지 못했는데, 오늘 마침내 [] 수조 기호로 이해할 수 있고, () 구조 함수의 매개 변수로 이해할 수 있다. {return;}반환된 함수를 나타냅니다.

좋은 웹페이지 즐겨찾기