Jak przechwycić std :: unique_ptr „by move” dla lambda w std :: for_each

Uczę się nowych funkcji w c ++ 11 i natknąłem się na ten problem. Chciałbym przechwycić unique_ptr, przesuwając go wewnątrz lambda jako argument dla for_each.

Ustawiać:

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

próba 1 - nie działa, ponieważ unique_ptr nie ma konstruktora kopii. c ++ 0x nie określa składni pass by move.

<code>std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
</code>

próba 2 - użyj bind, aby powiązać przeniesioną kopię p z funkcją, która przyjmuje int i:

<code>std::for_each(arr.begin(), arr.end(),
     std::bind([](const unique_ptr<int>& p, int& i){
          i += (*p);
     }, std::move(p))
);
</code>

Kompilator narzeka na to'result' : symbol is neither a class template nor a function template.

Głównym celem ćwiczenia jest zrozumienie, w jaki sposób ruchoma zmienna jest przechwytywana w lambdzie buforowanej do późniejszego wykorzystania.

questionAnswers(2)

yourAnswerToTheQuestion