vendredi 4 mai 2018

C++11 lambda capture `this` and capture local variables by value

The lambda function below captures this (so bar() can access its instance vars) and the local variables a,b,c.

class Foo {
  int x, y, z;
  std::function<void(void)> _func;
  // ...
  void bar() {
     int a,b,c;
     // ...
     _func = [this,a,b,c]() { // lambda func
        int u = this->x + a;
        // ...
     };
  }
};

But if I want to capture many instance variables and wish to avoid explicitly naming them in the capture list, I do not seem to be able to do this:

     _func = [this,=]() { // lambda func
        // ...
     };

I get a compiler error at the = following this,:

  error: expected variable name or 'this' in lambda capture list 

If I try this

     _func = [=,this]() { // lambda func
        // ...
     };

I get

  error: 'this' cannot be explicitly captured when the capture default is '='

Is there a shorthand for capturing this and everything else by value?

Aucun commentaire:

Enregistrer un commentaire