C + + 0x lambda 值捕获总是常量?

有没有什么方法可以通过值捕获,并使捕获的值非常数?我有一个库函数,我想捕获和调用一个方法是非常量,但应该。

下面的代码没有编译,但是使 foo: : Operal() const 修复了它。

struct foo
{
bool operator () ( const bool & a )
{
return a;
}
};




int _tmain(int argc, _TCHAR* argv[])
{
foo afoo;


auto bar = [=] () -> bool
{
afoo(true);
};


return 0;
}
23904 次浏览

使用可变的。


auto bar = [=] () mutable -> bool ....

Without mutable you are declaring the operator () of the lambda object const.

还有一种使用 易变的(由疯狂的埃迪提出的解决方案)的替代方法。

使用 [=],你的代码块通过值来捕获所有对象。你可以使用 [ & ]通过引用来捕获所有对象:

auto bar = [&] () -> bool

Or you can capture by reference only certain object [ = ,& afoo ]:

auto bar = [=, &afoo] () -> bool

有关详情,请参阅本页(解释部分) : Http://en.cppreference.com/w/cpp/language/lambda