Sto imparando le nuove funzionalità in C++ 11 e ho trovato questo problema. Mi piacerebbe catturare un unique_ptr spostandolo all'interno di una lambda come argomento per for_each.Come acquisire std :: unique_ptr "by move" per un lambda in std :: for_each
istituiti:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
tentativo 1 - non funziona perché unique_ptr non ha un costruttore di copia. C++ 0x non specifica la sintassi pass by move.
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
tentativo 2 - utilizzo legano per legare una copia spostato di p ad una funzione che prende int &:
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
compilatore si lamenta che 'result' : symbol is neither a class template nor a function template.
Lo scopo principale dell'esercizio è quello di capire come una variabile mobile può essere catturata in un lambda che viene memorizzato nella cache per un uso successivo.
Questa domanda è già stata posta [qui] (http://stackoverflow.com/q/8640393/20984). Tuttavia, non voterò per chiudere poiché la tua domanda contiene una soluzione alternativa (sebbene non funzionante). –
Vedere anche [qui] (http://stackoverflow.com/q/8236521/20984). –