如何使用引用lambda函数调用函数?

时间:2017-12-04 13:27:55

标签: c++ visual-studio lambda

代码:

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

1 个答案:

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

运作良好。