Poznaję nowe funkcje w C++ 11 i natrafiłem na ten problem. Chciałbym uchwycić unique_ptr, przesuwając go wewnątrz lambda jako argument dla for_each.Jak przechwytywać std :: unique_ptr "by move" dla lambda w std :: for_each
skonfigurować:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
próbę 1 - nie działa, ponieważ unique_ptr nie posiada konstruktor kopiujący. C++ 0x nie określa składni przez przenoszenie składni.
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
próba 2 - wykorzystanie wiążą się wiązać przeniesiona kopię p do funkcji, która zajmuje int &:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
Kompilator narzeka, że 'result' : symbol is neither a class template nor a function template.
Głównym celem ćwiczenia jest zrozumieć, w jaki sposób zmienna ruchoma może być przechwycona w lambda, która jest buforowana do późniejszego użycia.
To pytanie zostało już zadane [tutaj] (http://stackoverflow.com/q/8640393/20984). Nie głosuję jednak, aby zamknąć, ponieważ twoje pytanie zawiera alternatywne (choć nie działające) rozwiązanie. –
Zobacz także [tutaj] (http://stackoverflow.com/q/8236521/20984). –