私はc++11の新機能を学んでいて、この問題に遭遇しました。for_eachの引数として、unique_ptrをラムダ内に移動してキャプチャしたいと思います。
設定:
std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int); (*p) = 3;
試行1-unique_ptrにはコピーコンストラクターがないため、機能しません。c ++ 0xは、passbymove構文を指定しません。
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
試行2-bindを使用して、移動したpのコピーをint&を受け取る関数にバインドします。
std::for_each(arr.begin(), arr.end(),
std::bind([](const unique_ptr<int>& p, int& i){
i += (*p);
}, std::move(p))
);
コンパイラはそれを文句を言う'result' : symbol is neither a class template nor a function template.
演習の主な目的は、後で使用するためにキャッシュされるラムダに可動変数がどのようにキャプチャされるかを理解することです。