2017-09-05 5 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

いいえ、あなたは前方のラムダを宣言することはできません、すなわち、関数の中で、コンストラクタの定義を受け付けません。ラムダを作成すると、クラス・タイプという名前のコンパイラが生成されます。あなたはその名前が何であるかを知らないので、それを宣言することはできません。

これを宣言する必要がある場合は、名前を知っているので、代わりにファンクタを書く必要があります。

関連する問題