当lambda超出本地范围时,按值捕获局部变量

时间:2014-07-29 05:54:59

标签: c++ lambda arduino

当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编写的。

0 个答案:

没有答案