使用C ++ 0x,当我在lambda中有lambda时如何捕获变量?例如:
std::vector<int> c1;
int v = 10; <--- I want to capture this variable
std::for_each(
c1.begin(),
c1.end(),
[v](int num) <--- This is fine...
{
std::vector<int> c2;
std::for_each(
c2.begin(),
c2.end(),
[v](int num) <--- error on this line, how do I recapture v?
{
// Do something
});
});
答案 0 :(得分:8)
std::for_each(
c1.begin(),
c1.end(),
[&](int num)
{
std::vector<int> c2;
int& v_ = v;
std::for_each(
c2.begin(),
c2.end(),
[&](int num)
{
v_ = num;
}
);
}
);
不是特别干净,但确实有效。
答案 1 :(得分:1)
我能想到的最好的是:
std::vector<int> c1;
int v = 10;
std::for_each(
c1.begin(),
c1.end(),
[v](int num)
{
std::vector<int> c2;
int vv=v;
std::for_each(
c2.begin(),
c2.end(),
[&](int num) // <-- can replace & with vv
{
int a=vv;
});
});
有趣的问题!我会睡在上面,看看能不能找到更好的东西。
答案 2 :(得分:0)
在内部lambda中你应该拥有(假设你想通过引用传递变量):
[&v](int num)->void{
int a =v;
}