Как захватить 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.

Основная цель этого упражнения состоит в том, чтобы понять, как можно записать подвижную переменную в лямбду, которая кэшируется для последующего использования.

Ответы на вопрос(2)

Ваш ответ на вопрос