c++ - C++ 中的 Javascript 样式闭包
问题描述
首先,很抱歉,因为这个标题可能让你们中的一些 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;
}
推荐阅读
- gitlab - Gitlab CI 将文件传送到远程服务器(rsync)
- azure-active-directory - 如何撤销在 Azure AD 代表用户流上生成的令牌?
- javascript - 节点找不到文件
- react-native - 具有大数据的聊天应用程序中的平面列表(对话屏幕)会减慢其他组件的速度
- python - 何时使用 SQLalchemy 核心与 SQLalchemy ORM?
- java - super.onBackPressed(); 导致图像返回重复,因为我调用了两次。我该如何重写它来解决这个问题?
- python-3.x - 将相似用户划分为社交组
- android - 如何使用 Kotlin 从 Android 中的片段访问另一个片段?
- bash - 使用插入的Postgres文本到数组文本
- python-3.x - 为什么 TCS MockVita 显示此 python 代码的运行时错误