在lambda中捕获shared_ptr

Fri*_*day 1 c++ lambda shared-ptr weak-ptr

我想在 lambda 表达式中捕获共享指针。尝试了两种方法:

\n
    \n
  1. 捕获共享指针

    \n

    错误:非静态数据成员 A::ptr 的使用无效

    \n
  2. \n
  3. 创建一个弱指针并捕获它(通过网上的一些结果找到这个)。我不确定我的做法是否正确

    \n

    错误: \xe2\x80\x98const 类 std::weak_ptr\xe2\x80\x99 没有名为 \xe2\x80\x98someFunction\xe2\x80\x99 的成员

    \n
  4. \n
\n

在有人将其标记为重复之前,我知道它可能与其他一些问题类似,但他们的解决方案似乎都不适合我。想知道我做错了什么以及如何解决它,这就是我来这里的原因。

\n

文件.h

\n
#include "file2.h"\n\nclass A{\n   private:\n      uint doSomething();\n      std::shared_ptr<file2> ptr;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

文件.cpp

\n
#include "file.h"\n\nuint A::doSomething(){\n   ...\n\n   // Tried using weak pointer\n   //std::weak_ptr<Z> Ptr = std::make_shared<Z>();\n   \n   auto t1 = [ptr](){\n   auto value = ptr->someFunction;}\n   \n   // auto t1 = [Ptr](){\n   // auto value = Ptr.someFunction;}\n   \n   ...\n   }\n
Run Code Online (Sandbox Code Playgroud)\n

Jar*_*d42 9

您无法直接捕获成员,无论是捕获this还是使用初始值设定项捕获 (C++14)

auto t1 = [this](){ auto value = ptr->someFunction();};
Run Code Online (Sandbox Code Playgroud)
auto t1 = [ptr=/*this->*/ptr](){ auto value = ptr->someFunction();};
Run Code Online (Sandbox Code Playgroud)