gpt4 book ai didi

c++ - 如何使用引用 lambda 函数调用函数?

转载 作者:行者123 更新时间:2023-11-27 23:49:27 25 4
gpt4 key购买 nike

代码:

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
});
}

我需要在发送到 setit

的 lambda 函数中使用 localVar

我想我必须使用 [&]{ }

但是我该怎么做呢?我应该如何声明 setitglobalCallback

最佳答案

上面的代码有一些问题。

如果您不需要捕获任何东西,您可以使用 + 和 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
});
}

效果很好。

关于c++ - 如何使用引用 lambda 函数调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com