递归布尔 lambda C++
Recursive boolean lambda C++
出于某种原因,这个lambda语句不想编译:
bool DepthFirstSearch = [](Graph *g, bool *ch, stack<int> &S, int v, int w) -> bool
{
//Here is recursive DFS code
};
错误:no suitable conversion function from: "lambda[]bool()->bool" to bool exists
.
我的问题是为什么?
lambda 的类型不是 bool
。您可以使用auto
来完成这项工作
auto DepthFirstSearch = [](Graph *g, bool *ch, stack<int> &S, int v, int w) -> bool { ... }
或者使用 std::function
显式指定返回类型,但这将非常麻烦。请参阅 http://en.cppreference.com/w/cpp/utility/functional/function。
通常,只使用 auto 更容易,否则每次更改 lambda 的参数时都必须更改变量的类型。
如果你想让它递归,那么你必须捕获lambda(通过引用)。为此,您需要为其指定命名类型:
std::function<bool(Graph*, bool*, stack<int>&, int, int)> DepthFirstSearch =
[&](Graph *g, bool *ch, stack<int> &S, int v, int w) {
// bunch of code here that possibly calls DepthFirstSearch
};
你不能只在这里做auto DepthFirstSearch = [=](...){...}
因为 lambda 需要知道DepthFirstSearch
的类型才能捕获它 - 如果你只使用 auto
那么在处理 lambda 表达式之前该类型将不存在,这为时已晚。因此std::function<...>
.
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- AWS Lambda C++运行时权限被拒绝
- 捕获lambda中的std::数组
- 这 4 个 lambda 表达式之间有什么区别?
- 在实现文件中使用头文件的通用 lambda
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?