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傳進去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章