相关疑难解决方法(0)

为什么在c ++ 11中lambda函数没有函数<>类型?

我正在玩c ++ 11的功能.我发现奇怪的一件事是lambda函数的类型实际上不是函数<>类型.更重要的是,lambda似乎不能很好地使用类型推理机制.

附件是一个小例子,我在其中测试了翻转函数的两个参数以添加两个整数.(我使用的编译器是MinGW下的gcc 4.6.2.)在示例中,类型for addInt_f已使用函数<>显式定义,而addInt_l类型为类型推理的lambda auto.

当我编译的代码,该flip功能可以接受明确类型定义addInt的版本,但不是拉姆达版本,给了一个错误说, testCppBind.cpp:15:27: error: no matching function for call to 'flip(<lambda(int, int)>&)'

接下来的几行显示lambda版本(以及'raw'版本)如果显式转换为适当的函数<>类型,则可以接受.

所以我的问题是:

  1. 为什么lambda函数首先没有function<>类型?在小例子中,为什么不addInt_l具有function<int (int,int)>类型而不是具有不同的lambda类型?从函数式编程的角度来看,函数/函数对象和lambda之间有什么区别?

  2. 如果存在这两者必须不同的根本原因.我听说lambda可以转换为function<>但它们是不同的.这是C++ 11,一个执行问题是设计问题/缺陷还是有区分两者,因为它是方式的好处?似乎addInt_l单独的类型签名提供了关于函数的参数和返回类型的足够信息.

  3. 有没有办法编写lambda,以便可以避免上面提到的显式类型转换?

提前致谢.

    //-- testCppBind.cpp --
    #include <functional>
    using namespace std;
    using namespace std::placeholders;

    template <typename T1,typename T2, typename T3>
    function<T3 (T2, T1)> flip(function<T3 (T1, T2)> f) { return bind(f,_2,_1);}

    function<int (int,int)> addInt_f = [](int a,int b) -> int …
Run Code Online (Sandbox Code Playgroud)

c++ lambda functional-programming c++11

17
推荐指数
2
解决办法
4683
查看次数

标签 统计

c++ ×1

c++11 ×1

functional-programming ×1

lambda ×1