在类中声明自动 lambda 函数

Declaring an auto lambda function inside a class

本文关键字:lambda 函数 声明      更新时间:2023-10-16

我正在尝试在类中声明一个lambda比较函数:

class Solve {
private:
int n, q, first[N+1], depth[N+1], seg[_log(N)+2][(N<<1)+1];
vector <int> G[N+1], euler;
auto cmp = [euler, depth] (const int &a, const int &b) -> bool {
return depth[euler[a]] < depth[euler[b]];
};
...

但是得到错误:error: non-static data member declared with placeholder 'auto'

将函数声明为静态无济于事:error: capture of non-variable 'Solve::euler'+ 一堆其他错误。 显式使用 std::function <>也没有解决它。

该函数旨在用作min(a, b, cmp);

任何帮助将不胜感激!

无需将lambda存储在您的类中。您可以在需要时构建一个。

我会为此创建一个方法:

auto MakeComparator() const
{
return [this](const int &a, const int &b) -> bool
{
return depth[euler[a]] < depth[euler[b]];
};
};

您不能在类定义中创建 lambda 函数。将其移动到构造函数(auto在编译时确定,在这里不起作用(:

class Solve {
...
std::function<bool(int, int)> cmp;
public:
Solve() :
cmp{ [&euler = this->euler, &depth = this->depth] (const int& a, const int& b) -> bool {
return depth[euler[a]] < depth[euler[b]];
} } {}
};