首先,道歉,因为这个标题可能使你们中的某些c++家伙有些不高兴。但是,让我解释一下我要完成的工作。
我正在将lambda(称为funcA)作为参数传递给另一个函数(称为funcB)。有没有一种方法可以在funcB中声明变量并在funcA的范围内访问它们,而无需将它们作为参数传递给funcA,类似于javascript闭包的工作方式?
一个简单的示例(显然会失败)如下:
void funcB(std::function<void()> funcA) {
int testInt = 44;
funcA();
}
int main() {
funcB([&]() {
std::cout << testInt; // undefined identifier
});
return 0;
}
最佳答案
在这个特定示例中,惯用的方式是使用返回值:
void funcB(std::function<int()> funcA) {
int testInt = funcA();
}
int main() {
funcB([&]() {
int testInt = 44;
std::cout >> testInt;
return testInt;
});
return 0;
}
可以使用输出参数,但不常用:
void funcB(std::function<void(int&)> funcA) {
int testInt = 44;
funcA(testInt);
}
int main() {
funcB([&](int& testInt) {
std::cout >> testInt;
});
return 0;
}
关于c++ - C++中的JavaScript样式关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60008932/