相关疑难解决方法(0)

在lambda中移动捕获

如何通过C++ 11 lambda中的move(也称为右值引用)捕获?

我想写这样的东西:

std::unique_ptr<int> myPointer(new int);

std::function<void(void)> example = [std::move(myPointer)]{
   *myPointer = 4;
};
Run Code Online (Sandbox Code Playgroud)

c++ lambda rvalue-reference c++11

135
推荐指数
4
解决办法
6万
查看次数

将带有移动捕获的lambda传递给函数

我最近在努力寻找一个很难找到的bug.我试图将lambda传递给一个获取std::function对象的函数.lambda正在捕获一个不可复制的对象.

我想通了,显然一些副本必须在所有通行证之间发生.我来到这个结果是因为我总是以error: use of deleted function错误结束.

以下是产生此错误的代码:

void call_func(std::function<void()> func)
{
    func();
}

int main()
{
    std::fstream fs{"test.txt", std::fstream::out};
    auto lam = [fs = std::move(fs)] { const_cast<std::fstream&>(fs).close(); };
    call_func(lam);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我通过在std::fstream对象中加载对象来解决这个问题std::shared_ptr.这工作正常,但我认为可能有更性感的方式来做到这一点.

我现在有两个问题:

  1. 为什么这个错误会增加?
  2. 我的想法:我fstreamfor循环中生成了许多对象和lambda ,并且每个fstream都有一个lambda写入它.因此,fstream只能通过lambdas 来访问对象.我想为一些回调逻辑做这个.有没有像我尝试过的lambda那样更漂亮的方式?

c++ lambda c++14

10
推荐指数
1
解决办法
963
查看次数

标签 统计

c++ ×2

lambda ×2

c++11 ×1

c++14 ×1

rvalue-reference ×1