在类中声明自动 lambda 函数
Declaring an auto lambda function inside a class
我正在尝试在类中声明一个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]];
} } {}
};
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 两组使用lambda函数的大括号
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- C++:Lambda 函数指针转换的用例是什么?
- 将 lambda 函数作为参数传递C++
- 如何将 lambda 函数作为参数发送到另一个函数
- 传递 lambda 函数的权衡是什么?
- 如何使用类模拟 C++11 中的 lambda 函数和闭包?
- 不是 lambda 函数中的常量表达式
- 如何使用可变参数数重载 lambda 函数?
- 如何通过指针传递lambda函数?
- 使用带有 lambda 函数指针的模板
- openmp c++ 中并行块内 lambda 函数的奇怪行为
- C++ 中 Lambda 函数中的溢出
- 将数组传递到 lambda 函数中
- lambda 函数未显示正确的结果