std::function 간단한 이해
1811 단어 Cocos2d-x
#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;}반환된 함수를 나타냅니다.