Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否可以转发声明lambda,以便上面的代码可以调用它?_C++_Lambda_Forward Declaration - Fatal编程技术网

C++ 我是否可以转发声明lambda,以便上面的代码可以调用它?

C++ 我是否可以转发声明lambda,以便上面的代码可以调用它?,c++,lambda,forward-declaration,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:

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

不,您不能向前声明lambda。当您创建lambda时,您会得到一些编译器生成的命名类类型。您不知道该名称是什么,因此无法转发声明


如果需要将其向前声明,则很可能需要编写一个函子,因为您知道其名称。

否。lambda具有“无法表达的类型”,并且不可构造。您必须在声明的位置定义它。您这样做的目的是什么,而不仅仅是定义并向前声明一个普通函数?您可以使用
std::function
。@Scott Hunter这是一个名为renderAndPresent的函数,我希望它包含在这里。另外,我可以把lambda放在上面。或者做一个单独的函数,我只是觉得这样会更干净。虽然lambda有时对这样的事情很有用,但只要重构if,这个问题就可以解决得更好。如果fpslimon&&framelatency<1,则返回。然后您就可以从lambda内联编写代码了。