c++ - 我正在尝试传递一个 lambda 作为参数

标签 c++ c++11 lambda std-function

尝试将 lambda 传递给构造函数:

#include <functional>
#include <exception> 

template<typename R>
class Nisse
{
    private:
        Nisse(Nisse const&)             = delete;
        Nisse(Nisse&&)                  = delete;
        Nisse& operator=(Nisse const&)  = delete;
        Nisse& operator=(Nisse&&)       = delete;
    public:
        Nisse(std::function<R> const& func) {}
};

int main()
{
    Nisse<int>   nisse([](){return 5;});
}

编译时出现错误信息:

Test.cpp: In function ‘int main()’:
Test.cpp:19:39: error: no matching function for call to ‘Nisse<int>::Nisse(main()::<lambda()>)’
Test.cpp:19:39: note: candidate is:
Test.cpp:14:9: note: Nisse<R>::Nisse(const std::function<R>&) [with R = int]
Test.cpp:14:9: note:   no known conversion for argument 1 from ‘main()::<lambda()>’ to ‘const std::function<int>&’

最佳答案

std::function 的模板参数类型错误。尝试使用

Nisse(std::function<R()> const& func) {}

具体来说,模板参数需要是函数类型,但您传递的只是所需的返回类型。

关于c++ - 我正在尝试传递一个 lambda 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866406/

相关文章:

c++ - 在 Qml 代码中编辑 C++ QList<Object*> 模型的问题和一些 Qml 警告

c++ - 在 #define 中使用模板参数类型

c++ - 依赖隐式声明的 move 构造函数是否安全?

c++ - 使用 C++ 将子类与父类链接的方法

自更新到 R 3.4.0 以来,C++11 的 Rcpp 插件不起作用

c++ - 使用SFINAE分辨率区分普通模板参数和模板模板参数的技术

lambda - Java 8 构造函数引用的类型是什么?

c# - 如何测试表达式是否短路

javascript - 如何将Lambda函数中的Mongo Atlas数据库与Mongoose连接

c++ - 制作免费的静态函数有什么好处吗?