Estoy aprendiendo las nuevas características en C++ 11 y me encontré con este problema. Me gustaría capturar un unique_ptr moviéndolo dentro de un lambda como argumento para for_each.Cómo capturar std :: unique_ptr "por movimiento" para un lambda en std :: for_each
estableció:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
intento 1 - no funciona porque unique_ptr no tiene un constructor de copia. C++ 0x no especifica la sintaxis paso por paso.
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
intento 2 - uso se unen para unir una copia movido de p para una función que toma int &:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
compilador se queja de que 'result' : symbol is neither a class template nor a function template.
El objetivo principal de esta actividad es Entender cómo una variable movible puede ser capturada en un lambda que se almacena en caché para su uso posterior.
Esta pregunta ya se ha formulado [aquí] (http://stackoverflow.com/q/8640393/20984). Sin embargo, no voto para cerrar porque su pregunta contiene una solución alternativa (aunque no funciona). –
Ver también [aquí] (http://stackoverflow.com/q/8236521/20984). –