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 @   Bigben  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-06-04 CEF3 75 之后版本 Flash 不能自动播放的问题
2020-06-04 离线编译chromium 59.0.3071.104,方法适合任意版本
2020-06-04 指定版本拉取
2019-06-04 es查询和更新 语句示例
2014-06-04 踩踩踩
2013-06-04 格式化u盘
2013-06-04 QT中PRO文件写法的详细介绍,很有用,很重要!
点击右上角即可分享
微信分享提示