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.