Как захватить std ::уникальный _ptr «по ходу» для лямбды в std ::для _каждого

Я изучаю новые функции в С++ 11 и столкнулся с этой проблемой. Я хотел бы захватить уникальный _ptr, переместив его внутрь лямбды в качестве аргумента для _каждого.

настроить:

std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int);  (*p) = 3;

попытка 1 -не работает, потому что уникальный _ptr не имеет конструктора копирования. C++0x не определяет синтаксис передачи путем перемещения.

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.

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

12
задан deft_code 23 April 2012 в 17:18
поделиться