我正在学习 c++11 中的新功能并遇到了这个问题。我想通过将其移动到 lambda 中作为 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 没有指定按移动语法传递。
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.
练习的主要目的是了解如何在缓存中以供以后使用的 lambda 中捕获可移动变量。