c++ - 使用 lambda 表达式和 std::function 时没有匹配的函数调用错误。

标签 c++ c++11 lambda

我正在尝试在我的代码中使用这个 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/

相关文章:

C++ 复制构造函数 : field with list of pointers

javascript - 如何在我的网站中使用 Chrome 扩展功能 (NaCl)?

c++ - 关于多重继承和虚继承

c++ - 如何找到包含文件的 'namespace keyword'?

c++ - 运算符的正确使用 >> 在同一输入流上的后续时间

amazon-web-services - AWS Api网关+ Lambda +自定义域(Route53)缺少身份验证 token 问题

c++ - Lambda 和线程

c++ - 结合 GMPXX 和 C++11 及更高版本

c++ - 模板构造函数优先于普通复制和移动构造函数?

c++ - 总是在 lambda 表达式中捕获所有内容是一种不好的做法吗?