Я изучаю новые функции в С++ 11 и сталкивался с этой проблемой. Я хотел бы захватить unique_ptr, перемещая его внутри лямбды в качестве аргумента for_each.
настроить:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
попытка 1 - не работает, потому что unique_ptr не имеет конструктора копирования. С++ 0x не указывает синтаксис pass by move.
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
попытка 2 - использовать bind для привязки перенесенной копии p к функции, которая принимает int &:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
Компилятор жалуется, что 'result' : symbol is neither a class template nor a function template.
Основная цель упражнения - понять, как перемещать подвижную переменную в лямбда, которая кэшируется для дальнейшего использования.