用 C++ lambda 太爽了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuyongqi9
V2EX    C++

用 C++ lambda 太爽了

  •  
  •   zhuyongqi9 323 天前 7809 次点击
    这是一个创建于 323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写 GUI 经常碰到需要使用 callback 来描述 event 发生时的 behavior ,在 callback 函数里面不可避免的要使用到某些变量,之前不用 lambda 需要把 callback 内引用的变量都作为全局变量,现在用了 lambda 之后可以直接变量捕捉,在 class method 内也能捕获 this 指针,用起来太爽了

    54 条回复    2025-03-12 21:14:38 +08:00
    kera0a
        1
    kera0a  
       323 天前 via iPhone   7
    写 c++ 的这么惨吗?
    AllenTsui
        2
    AllenTsui  
       323 天前
    写 c++ 的这么惨吗?
    zmxnv123
        3
    zmxnv123  
       323 天前
    写 c++ 的这么惨吗?
    orionl
        4
    orionl  
       323 天前
    写 c++ 的这么惨吗?
    majiangjun
        5
    majiangjun  
       323 天前
    写 c++ 的这么惨吗?
    ouou0701
        6
    ouou0701  
       323 天前
    写 c++ 的这么惨吗?
    chunriyeqiukong
        7
    chunriyeqiukong  
       323 天前
    写 c++ 的这么惨吗?
    fgsiveoneone     8
    fgsiveoneone  
       323 天前   5
    这不是 C++11 引入的吗?今夕是何年
    zhuyongqi9
        9
    zhuyongqi9  
    OP
       323 天前 via iPhone
    纯纯惨了,以前写 js 的时候从来没考虑过这种问题
    zhuyongqi9
        10
    zhuyongqi9  
    OP
       323 天前 via iPhone
    @fgsiveoneone 是的
    BBCCBB
        11
    BBCCBB  
       323 天前
    写 c++ 的这么惨吗?
    ink19
        12
    ink19  
       323 天前
    写 c++ 的这么惨吗?
    chingyat
        13
    chingyat  
       323 天前
    为啥要用全局变量?就算不用 lambda 也应该给个 void *user_data 参数吧。
    zhuyongqi9
        14
    zhuyongqi9  
    OP
       323 天前
    @chingyat 参数是指这种吗?
    void* (*f)(void *user_data);
    我想表达的意思是非函数参数的变量
    ugpu
        15
    ugpu  
       323 天前   1
    以前:
    callBack() { getInstance().fun_a(); xxxx; dosomething..... } //安全的 low 了点
    callBack() { global_ptr->func(); } //天杀的 天塌了 全局指针指向的对象被销毁了.

    现在 obj.CallFunc([this]() { .a++; .b--; }

    由此可见 写 C++的是真的惨.
    ugpu
        16
    ugpu  
       323 天前
    @zhuyongqi9
    尴尬的就是指针指向的对象 协同工作里都是其他模块的 崩的时候就是甩锅. 然后他说你不看文档.最后总结没有文档规范等等一系列问题.
    尤其长期维护工程 新员工进来 那叫一个惨.
    后来大家都用 全局变量 getInstance()->xxxx. 指针都给弄没了。 你说你要用 智能指针. 还是自己封装的. 结果用起来又内存泄露.
    CPP 被弃用的问题是 维护成本太高了... 业务码农还要关心技术 结构问题.成本高。 解决方案用指针和全局变量都是为了堵漏.
    zhuyongqi9
        17
    zhuyongqi9  
    OP
       323 天前 via iPhone
    @ugpu hhhhhhhh
    ugpu
        18
    ugpu  
       323 天前   1
    还有那种天杀的队友, 一个对象虚继承. A->b->c 析构函数也是虚函数, 他用完 销毁了 C. 别人还在用 B.
    万丈高楼轰然倒塌就是这么来的.
    要是扯设计 规范 用法 一群程序员有一群想法.
    我建议大家用 Java & Golang. CPP 真不适合团队协作. 单机王用 CPP 爽
    originals
        19
    originals  
       323 天前
    用的时候挺爽的,就是优化等级高了后,崩了找不到地方
    snylonue
        20
    snylonue  
       323 天前
    c++ 的 lambda 感觉挺嗦的
    zhuyongqi9
        21
    zhuyongqi9  
    OP
       323 天前   2
    @ugpu 兄弟说的都是肺腑之言。自己写程序和合作开发软件完全是两码事,你想遵从规范,别人不一定想,如果一个项目没有一个强有力的人管理代码规范,后果就是五花八门,什么语言都差不多。曾经见过一个 python 项目两个人开发,类似的逻辑,一个人只用 async ,一个人只用 thread ,完全头大
    DOOMS
        22
    DOOMS  
       323 天前
    还有不要直接捕获 this 指针 如果是 c++17 可以使用 std::enable_shared_from_this<T>:weak_from_this
    NessajCN
        23
    NessajCN  
       323 天前
    流下了同情的泪水
    roundgis
        24
    roundgis  
       323 天前 via Android
    @zhuyongqi9 cpp 就是用来过滤队友的
    cJ8SxGOWRH0LSelC
        25
    cJ8SxGOWRH0LSelC  
       323 天前
    这段话, 中文夹杂着大量的英文单词, 有点香港电视剧的味道。 却也没有什么违和感。
    shuax
        26
    shuax  
       323 天前
    小心生命期的大坑
    GeruzoniAnsasu
        27
    GeruzoniAnsasu  
       323 天前


    7 年前我问的问题,那时候那个团队才刚用上 c++11 已经很离谱了

    OP 今年还问得出这个问题我觉得我对 c++技术栈离谱程度的理解还不够
    zhuyongqi9
        28
    zhuyongqi9  
    OP
       323 天前
    @GeruzoniAnsasu 我没有问问题,这是陈述句
    kzfile
        29
    kzfile  
       323 天前   1
    有的人的 C++写出来像 C ,有的人写出来像 Java ,有的人写出来像 Python ,就大概能看出这些人固定代码习惯是在哪几年了
    skallz
        30
    skallz  
       323 天前
    @StinkyTofus 因为专业名词的中文翻译很多都很垃圾,不明所以,当初被定在耻辱柱上的鲁棒性就是如此,还不如英文原文容易看懂
    sir283
        31
    sir283  
       323 天前 via Android
    @kzfile 真实,好在 c++足够强大,各种写法基本能适用,虽然可能抽象一些。
    skallz
        32
    skallz  
       323 天前   1
    @kzfile 很正常,不要说 c++,java ,js ,python 等,很多代码写出来都能一眼看出是哪个生态的味道 233333 ,不同语言社区的主流风格区别蛮大的
    ca2oh4
        33
    ca2oh4  
       323 天前
    c++ 11 都 10 多年了。。。
    calvinHxx
        34
    calvinHxx  
       323 天前
    天翼 3G 真是太快了。
    chashao
        35
    chashao  
       323 天前
    我们游戏引擎都是-std:c++latest 来着
    yuruizhe
        36
    yuruizhe  
       323 天前
    @zhuyongqi9 py 这东西,人来写鬼来看,用在协作工程上简直不可维护,再给整个动态属性就更有意思了
    levelworm
        37
    levelworm  
       323 天前 via Android
    @ugpu 应用层不用它就是了。还是更适合系统编程。
    liuliuliuliu
        38
    liuliuliuliu  
    PRO
       323 天前   2
    那个啥?要不你试试 C#? 得爽到 GC
    EchoWhale
        39
    EchoWhale  
       323 天前 via iPhone
    写 c++ 的这么惨吗?
    xuanbg
        40
    xuanbg  
       323 天前
    C 艹最普遍的问题是执行 delete 无效造成内存泄露,光看代码很难确定泄漏点在哪。
    xuanbg
        41
    xuanbg  
       323 天前
    @skallz 第一次看到鲁棒性这个词我真的是一头雾水,根本无法理解是个啥意思。更早的是“套接字”,也是无法理解。
    xjp
        42
    xjp  
       323 天前
    python 、js 、java 表示很赞
    bluearc
        43
    bluearc  
       323 天前
    老项目已经见过很多回调地狱了,新项目可能的话我都尽量推协程
    SHIINASAMA
        44
    SHIINASAMA  
       323 天前
    致远星战况如何,说实话看到标题就没绷住
    yfeng445
        45
    yfeng445  
       323 天前
    @StinkyTofus 因为里边都是专有名词 www
    FreeGuy
        46
    FreeGuy  
       322 天前
    C++ 基本都是被逼着走,你看人家 Delphi 在小圈子里面依然发光发热,哪那么多语法糖,爱用不用!
    labubu
        47
    labubu  
       322 天前
    都 2024 年了,你才用上 10 年前的标准?
    a764934018
        48
    a764934018  
       322 天前
    哇,你也网上冲浪啊?
    cnbatch
        49
    cnbatch  
       322 天前
    我一个月前抱怨 C++20 的支持度不佳 ( /t/1081936 ),想不到你才刚刚用上 C++11

    这么说吧,有了 lambda 只是大幅减轻了回调地狱的程度,但远未达到“爽”的地步
    nyxsonsleep
        50
    nyxsonsleep  
       320 天前
    @levelworm 系统编程也是用 C
    levelworm
        51
    levelworm  
       320 天前 via Android
    @nyxsonsleep C++还是不少的,其实 JVM 都好多。。。
    zhuyongqi9
        52
    zhuyongqi9  
    OP
       320 天前
    @levelworm 我之前一直不知道 jvm 系统编程,想了解一下,能举一个例子吗
    levelworm
        53
    levelworm  
       319 天前
    @zhuyongqi9 呃,比如 Spark ?
    deetincelle
        54
    deetincelle  
       211 天前
    同 js 转 cpp, 先收藏为敬
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     859 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:41 PVG 05:41 LAX 14:41 JFK 17:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86