Como capturar std :: unique_ptr “by move” para um lambda em std :: for_each
Estou aprendendo os novos recursos do c ++ 11 e me deparei com esse problema. Eu gostaria de capturar um unique_ptr movendo-o dentro de um lambda como um argumento para for_each.
configuração:
<code>std::array<int,4> arr = {1,3,5,6}; std::unique_ptr<int> p(new int); (*p) = 3; </code>
tentativa 1 - não funciona porque o unique_ptr não possui um construtor de cópia. c ++ 0x não especifica a sintaxe de passagem por movimentação.
<code>std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; }); </code>
tentativa 2 - use bind para ligar uma cópia movida de p para uma função que leva int e:
<code>std::for_each(arr.begin(), arr.end(), std::bind([](const unique_ptr<int>& p, int& i){ i += (*p); }, std::move(p)) ); </code>
Compiler reclama que'result' : symbol is neither a class template nor a function template.
O objetivo principal do exercício é entender como uma variável móvel pode ser capturada em um lambda que é armazenado em cache para uso posterior.