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