你是用lamda表达式直接作为函数的参数,但lamda作为std::function参数实际传的只是一个副本,所以相当于你是对这个副本引用,故没意义。
struct Lambda{
//Capture by value
Lambda(int i):_i(i){}
void operator()() const{
std::cout << ++_i << '\n';
}
mutable int _i;
};
void invoke2(const Lambda& fn) // # PASS LAMBDA BY REFERENCE
{
fn();
}
int main()
{
int i{ 0 };
// Increments and prints its local copy of @i.
Lambda count{i};
invoke2(count);//1
invoke2(count);//2
invoke2(count);//3
return 0;
}
正确的代码如下:
#include <iostream>
#include <functional>
void myInvoke(const std::function<void()>& fn)
{
fn();
}
int main()
{
int i = 0;
auto count{[&i]()mutable{
std::cout<<++i<<'\n';
}};
myInvoke(count);
myInvoke(count);
myInvoke(count);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: