假设您有一个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?