2017-09-05 1 views
2

이런 일이 가능한지 궁금합니다. 또한 위의 클래스와 생성자를 선언 한 다음 객체를 생성하고 생성자에서 모든 행을 실행하도록했습니다. 그것은 myclass::myclass() { /*definition*/}람다를 선언하여 그 위의 코드에서 호출 할 수 있습니까?

void present(); 
// I was hoping this would let the below code know of the lambda. 

if (GFX::bFPSLimitOn) { 
    if (frameLatency > 1.0/GFX::FPSLimit) present(); 
    else return; 
} else present(); 

auto present = [&]() { 
    GFX::clearScreen(); 
    GFX::renderScene(activeCamera); 
    GUI::renderGUI(); 
    GFX::presentScreen(); 
    lastFramePresentTimestamp = currentTime; 
}; 
+3

no. 람다는 "말로 표현할 수없는 유형"을 가지고 있으며 구성 할 수 없습니다. 선언 할 위치에서 정의해야합니다. –

+2

정상적인 함수를 정의하고 전달하는 것과는 대조적으로이 작업을 통해 무엇을 달성하려고합니까? –

+1

이 목적으로'std :: function'을 사용할 수 있습니다. –

답변

3

아니, 당신은 앞으로 람다를 선언 할 수 없습니다, 즉 함수에 생성자 정의를 허용하지 않습니다. 당신이 람다를 만들 때, 컴파일러는 생성 된 클래스 타입을 얻는다. 당신은 그 이름이 무엇인지 알지 못하기 때문에 그것을 선언 할 수 없습니다.

앞으로 선언해야 할 가능성이 높다면 이름을 알기 때문에 대신 펑터를 작성해야합니다.

관련 문제