我们可以在 C++ 中移动捕获变量,如下所示。
string s;
auto f = [s = std::move(s)](){ /* do something */ };
我们可以复制捕获这个如下。
auto f = [*this](){ /* do something */ };
但是我们如何在右值引用成员函数中移动捕获this?
class Obj {
// ...
auto method() && {
// do something.
return [ /* "*this = std::move(*this)" is a syntax error */ ](){
// do something.
};
}
// ...
};
您通常可以将其分配给一个变量。 ;-)
class Obj {
// ...
auto method() && {
// do something.
return [self = std::move(*this)](){
// Use self.member here
};
}
// ...
};
注意
self
的类型是const Obj
。如果你想让它不是const
,你必须使lambdamutable
.
[self = std::move(*this)]()mutable{
// Use self.member here
}