将对象复制到Lambda捕获

时间:2018-07-16 17:34:24

标签: c++ lambda

假设您有一个lambda,它将在单独的线程中运行。这意味着它必须拥有捕获列表中的资源。我遇到的问题是通过复制捕获会导致const对象,这意味着我只能调用const方法。在下面的示例中,我想将成员info的副本传递到lambda捕获中。

示例:

#include <iostream>
#include <functional>

using namespace std;

class ConnectionInfo
{
public:
    ConnectionInfo():port(0) {}
    ConnectionInfo(const ConnectionInfo &other) { port = other.port;}
    int port;
    void Connect();

};

class ConnectionHolder
{
public:
    ConnectionInfo info;
};

int main() {
    ConnectionHolder h;
    auto &ci = h.info;

    // This won't compile because ci is const, and Connect() is not a const function
    auto func = [ci] { ci.Connect();};
    return 0;
}

我不确定为什么是拷贝捕获,为什么编译器必须考虑拷贝const。 lambda是否只是一个包含一堆成员的新结构,当调用函数时,该成员将可用,并且根据捕获是按引用还是按值获取,该结构具有引用或值?

如何通过复制传递对象,以使它们在lambda中不是const?

0 个答案:

没有答案