当lambda超出本地范围时,我无法在lambda中使用局部变量的值:
void createLambda(){
int testNum = 5;
auto myLambda = [testNum]() mutable {
Serial.print(testNum);
}
this->otherClass->handleLambda(myLambda);
}
otherClass通过创建一个用于存储lambda的新Callback实例来处理lambda:
class CallbackBase {
public:
virtual void execute() = 0;
}
template<typename Func>
class Callback : public CallbackBase{
public:
Func funcData;
Callback(Func func){
funcData = func;
};
void execute(){
funcData();
}
}
class OtherClass{
CallbackBase *callback;
template<typename Func>
handleLambda(Func func){
callback = new Callback(<decltype(func)>);
}
}
lambda将在createLambda()完成执行后调用,并且可能在创建它的对象被销毁之后调用。在createLambda()完成执行后调用时,它总是打印:
0
我理解为什么通过引用捕获将是一个问题,但认为仍然可以通过值捕获testNum。这是否可能,如果没有,是否有任何简单的解决方法?
另外作为注释,此代码是为Arudino Teensy 3.1编写的。