96 votes

C ++0x capture lambda 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 est non-constante mais qui devrait l'être.

Ce qui suit ne compile pas, mais le fait que foo :: operator () 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;
}
 

151voto

Crazy Eddie Points 23778

Utilisez mutable.

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X