lamba: lamba变量申明

 

1,下面编译运行没问题

#include <iostream>  
#include <unordered_map>
#include <functional>
using namespace std;


void solve() {
    int x=100;

    typedef int (*MyType)(int i);

    MyType f= [](int i) {
        return 10 - i - 1;
    };

    cout<<f(10);
}

int main() {
    solve();
    return 0;
}

 

2,如果想在lamba中引用外围变量x,是无法做到的,如下会报错,类型不匹配了

#include <iostream>  
#include <unordered_map>
#include <functional>
using namespace std;


void solve() {
    int x=100;

    typedef int (*MyType)(int i);

    MyType f = [x](int i) {
        return x - i - 1;
    };

    cout<<f(10);
}

int main() {
    solve();
    return 0;
}

 error C2440: “初始化”: 无法从“solve::<lambda_1>”转换为“MyType”

用 std::function强制转换,改成这样就可以了

#include <iostream>  
#include <unordered_map>
#include <functional>
using namespace std;


void solve() {
    int x=100;

    //typedef int (*MyType)(int i);

    function<int(int)> f = [x](int i) {
        return x - i - 1;
    };

    cout<<f(10);
}

int main() {
    solve();
    return 0;
}

 

4,但是如果还想用:

typedef int (*MyType)(int i);
那就没办法了。只能在接口中加一个void*指针,将x传进去。
posted @ 2022-06-04 22:34  Bigben  阅读(78)  评论(0编辑  收藏  举报