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

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

Ce qui suit ne comstack pas mais en faisant 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; } 

Utilisez mutable.

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

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

Il existe une autre manière d’utiliser mutable (solution proposée par Crazy Eddie).

Avec [=] votre bloc capture tous les objects par valeurs. Vous pouvez utiliser [&] pour capturer tous les objects par référence:

 auto bar = [&] () -> bool 

Ou vous pouvez capturer par référence uniquement certains objects [=, & afoo] :

 auto bar = [=, &afoo] () -> bool 

Reportez-vous à cette page pour plus de détails (section Explication ): http://fr.cppreference.com/w/cpp/language/lambda