C++ lambda 如何在右值引用成员函数中移动捕获 *this?

问题描述 投票:0回答:1

我们可以在 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.
      };
  }
  // ...
};
c++ functional-programming monads monad-transformers combinators
1个回答
1
投票

您通常可以将其分配给一个变量。 ;-)

class Obj {
  // ...
  auto method() && {
      // do something.
      return [self = std::move(*this)](){
        // Use self.member here
      };
  }
  // ...
};

注意

self
的类型是
const Obj
。如果你想让它不是
const
,你必须使lambda
mutable
.

[self = std::move(*this)]()mutable{
    // Use self.member here
}
© www.soinside.com 2019 - 2024. All rights reserved.