代码:
typedef void(*callbackType) (int);
callbackType globalCallback;
void setit(callbackType callback) {
globalCallback = callback;
}
int main() {
int localVar = 5;
setit([](int num) {
std::cout << localVar; // there is an error here
});
}
我需要在lambda函数中使用localVar,我发送给 setit
我想我必须使用 [&amp;] {}
但我该怎么办呢?我应该如何声明 setit 和 globalCallback ?
答案 0 :(得分:3)
上面的代码存在一些问题。
如果您不需要捕获任何内容,可以使用+
和lambda将其转换为函数指针:
typedef void(*callbackType)(int);
callbackType globalCallback;
void setit(callbackType callback) {
globalCallback = callback;
}
int main() {
setit(+[](int){});
}
但这个技巧只适用于 capturless lambdas。
一种可能的解决方案是更改callbackType
并改为使用std::function
:
using callbackType = std::function<void(int)>;
callbackType globalCallback;
void setit(callbackType callback) {
globalCallback = callback;
}
int main() {
int localVar = 5;
setit([localVar](int num) {
std::cout << localVar; // there is an error here
});
}
运作良好。