我有一个接受如下函数指针的函数:
void invoke(void (*fnCallback)(int data)) { ... }
我还有一个类方法,我想从中调用此函数,并将回调作为lambda传递:
void Class::testInvoke() {
auto f = [](int data) -> void { data = data + 1; };
invoke(f);
}
这可行,但是如果我尝试使用lambda捕获,则代码无法编译:
void Class::testInvoke() {
int value = 1;
auto f = [=](int data) -> void { data = data + value; };
invoke(f);
}
在第二种情况下,如果我注释掉invoke(f)
行,则代码将编译。我究竟做错了什么?我该如何更改invoke
的签名,使其接受捕获的lambda?