Fri*_*day 1 c++ lambda shared-ptr weak-ptr
我想在 lambda 表达式中捕获共享指针。尝试了两种方法:
\n捕获共享指针
\n错误:非静态数据成员 A::ptr 的使用无效
\n创建一个弱指针并捕获它(通过网上的一些结果找到这个)。我不确定我的做法是否正确
\n错误: \xe2\x80\x98const 类 std::weak_ptr\xe2\x80\x99 没有名为 \xe2\x80\x98someFunction\xe2\x80\x99 的成员
\n在有人将其标记为重复之前,我知道它可能与其他一些问题类似,但他们的解决方案似乎都不适合我。想知道我做错了什么以及如何解决它,这就是我来这里的原因。
\n文件.h
\n#include "file2.h"\n\nclass A{\n private:\n uint doSomething();\n std::shared_ptr<file2> ptr;\n}\nRun 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 }\nRun Code Online (Sandbox Code Playgroud)\n
您无法直接捕获成员,无论是捕获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)
| 归档时间: |
|
| 查看次数: |
6515 次 |
| 最近记录: |