2017-09-05 4 views
2

Je me demandais si quelque chose comme ceci est possible. J'ai également essayé en déclarant une classe et un constructeur ci-dessus, puis en dessous juste en construisant un objet et en demandant au constructeur d'exécuter toutes les lignes. Il n'accepte pas la définition du constructeur dans la fonction, à savoir, myclass::myclass() { /*definition*/}Puis-je transférer un lambda afin que le code au-dessus puisse l'appeler?

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. Un lambda a un "type indicible" et n'est pas constructible. Vous devez le définir là où vous le déclarez. –

+2

Qu'est-ce que vous essayez d'accomplir en faisant cela, par opposition à simplement définir et transmettre une fonction normale? –

+1

Vous pouvez utiliser 'std :: function' dans ce but. –

Répondre

3

Non, vous ne pouvez pas déclarer avant un lambda. Lorsque vous créez un lambda, vous obtenez un type de classe nommé compilateur. Vous ne savez pas quel sera ce nom, vous ne pouvez donc pas le déclarer.

Si vous avez besoin de l'avoir déclaré en avant, vous aurez probablement besoin d'écrire un foncteur à la place, car vous connaissez le nom.