Я изучаю новые функции в С++ 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.
Основная цель упражнения — понять, как перемещаемая переменная может быть захвачена в лямбда-выражении это кешируется для последующего использования.