C ++ 0x лямбда-захват по значению всегда const? - PullRequest
90 голосов
/ 14 мая 2010

Есть ли способ захвата по значению и сделать захваченное значение неконстантным? У меня есть функтор библиотеки, который я хотел бы захватить и вызвать метод, который не является константным, но должен быть

Следующее не компилируется, но fst :: operator () const исправляет это.

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


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

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

  return 0;
}

Ответы [ 2 ]

139 голосов
/ 14 мая 2010

Использовать изменяемый.


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

Без изменения вы объявляете оператор () лямбда-объекта const.

0 голосов
/ 28 марта 2016

Существует альтернативный способ использования mutable (решение, предложенное Crazy Eddie).

С [=] ваш блок захватывает все объекты по значениям. Вы можете использовать [&] для захвата всех объектов по ссылке:

auto bar = [&] () -> bool

Или вы можете захватить по ссылке только определенный объект [=, & afoo] :

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

Обратитесь к этой странице за подробностями ( Пояснение раздел): http://en.cppreference.com/w/cpp/language/lambda

...