web-dev-qa-db-fra.com

Capture lambda C ++ 0x par valeur toujours const?

Existe-t-il un moyen de capturer par valeur et de rendre la valeur capturée non constante? J'ai un foncteur de bibliothèque que je voudrais capturer et appeler une méthode qui n'est pas constante mais qui devrait l'être.

Ce qui suit ne compile pas mais la création de foo :: operator () const le corrige.

struct foo
{
  bool operator () ( const bool & a )
  {
    return a;
  }
};


int _tmain(int argc, _TCHAR* argv[])
{
  foo afoo;

  auto bar = [=] () -> bool
    {
      afoo(true);
    };

  return 0;
}
99
Zac

Utilisez mutable.


auto bar = [=] () mutable -> bool ....

Sans mutable, vous déclarez l'opérateur () de l'objet lambda const.

157
Edward Strange