我可以转发声明一个lambda,以便它上面的代码可以调用吗?

时间:2017-09-05 11:44:53

标签: c++ lambda forward-declaration

我想知道这样的事情是否可行。我还尝试通过声明上面的类和构造函数,然后在下面构建一个对象并使构造函数运行所有行。它不接受函数中的构造函数定义,即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;
};

1 个答案:

答案 0 :(得分:3)

不,你不能转发声明一个lambda。当你创建一个lambda时,你会得到一些编译器生成的命名类类型。你不知道那个名字是什么,所以你不能转发声明它。

如果你需要向前宣布它,那么很可能你需要编写一个仿函数,因为你知道这个名字。