由于某种原因,这个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
。
我的问题是为什么?
答案 0 :(得分:1)
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的参数时都必须更改变量的类型。
答案 1 :(得分:1)
如果你想让它递归,那么你必须捕获lambda(通过ref)。为此,您需要为其指定一个类型:
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<...>
。