私はC++ 11の新機能を学び、この問題に遭遇しました。私はfor_eachの引数としてラムダの中でそれを動かすことによってunique_ptrを捕捉したいと思います。std :: for_eachでlambdaのstd :: 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は、移動構文によるパスを指定しません。
std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
試み2 - 使用バインドint型&を取る関数へのpの移動コピーをバインドする:
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.
主な目的はであることを訴えます後で使用するためにキャッシュされたラムダで可動変数をどのようにキャプチャするかを理解する。
この質問は既に質問されています[ここ](http://stackoverflow.com/q/8640393/20984)。しかし、あなたの質問には代替的な(機能していませんが)解決策が含まれているので、私は投票には投票しません。 –
[こちら](http://stackoverflow.com/q/8236521/20984)も参照してください。 –