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内联编写代码了。