我正在尝试在我的代码中使用这个 lambda 表达式。看起来仿函数或 lambda 的定义有问题。
我相信 lambda 表达式是正确的。但是我不能满足我定义的函数原型(prototype)。
函数定义:
template<typename E, typename container>
void for_each(Iterator<E,container> begin, std::function<void(E&)> fun)
{
do // does the given unary functor to elements
{ //from starting iterator 'til the end.
fun(*begin);
begin = begin.next();
}while(begin.hasNext());
fun(*begin);
}
和来电者:
for_each(c.iterator(), [&](E& e){add(e);});
我除了用 lambda 表达式实现这个函数调用。但是编译器说“错误:没有匹配的函数来调用..”
最佳答案
lambda 不是 std::function
,因此推导失败。
您可以简单地传递通用 Functor
:
template<typename E, typename container, typename F>
void for_each(Iterator<E, container> begin, F&& fun)
{
// ...
}
关于c++ - 使用 lambda 表达式和 std::function 时没有匹配的函数调用错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965308/